在 Typescript 數組類型 這篇文章末咱們說起到了 Typescripe 一種內置對象。node
在 Typescript 中內置對象是做爲已經定義好(內置)的類型去使用的,很顯然它是存在全局做用域(Global)上。git
拿 Boolean
這個內置對象來講吧,這樣的對象在 ECMAScript 中有不少。github
// buildInObjects.ts let b1: boolean = new Boolean(1); let b2: Boolean = new Boolean(1); // 0.0.7/buildInObjects.ts:1:5 - error TS2322: Type 'Boolean' is not assignable to type 'boolean'. // 'boolean' is a primitive, but 'Boolean' is a wrapper object. Prefer using 'boolean' when possible. // 1 let b1: boolean = new Boolean(1); 複製代碼
第 1 行報錯,咱們在 Typescript 基礎類型 就分析過了,不能將 Boolean
分配給 boolean
,前者是包裝器對象,後者是基本類型。這也間接說明第 2 行能正常運行的緣由了。typescript
// buildInObjects2.ts const body: HTMLElement = document.body; const divList: NodeList = document.querySelectorAll('div'); document.addEventListener('click', (e: MouseEvent) => { // do something }); 複製代碼
示例中 HTMLElement
、NodeList
和 MouseEvent
就是 DOM 與 BOM 內置對象。npm
總結:無論 ECMAScript 內置對象仍是 DOM 與 BOM 的內置對象,其文件定義在 TypeScript 核心庫的文件 中。下面就說說它。數組
是否是也內置了呀?這個,這個不是了。你得引入第三方聲明文件。這裏牽扯到聲明文件,下一篇內容咱們來講說。瀏覽器
npm install @types/node --save-dev
複製代碼
它定義了瀏覽器環境全部類型,預置在 Typescript 中,因此咱們能隨手拿來用。而這些文件都幫咱們作了不少判斷工做了(一個字省心)。bash
// buildInObjects3.ts Math.pow(10, '3'); // 0.0.7/buildInObjects3.ts:1:14 - error TS2345: Argument of type '"3"' is not assignable to parameter of type 'number'. // 1 Math.pow(10, '3'); 複製代碼
經過錯誤提示咱們能夠推斷出 Math.pow
是這麼定義的markdown
// buildInObjects4.ts interface Math { pow(x:number, y:number): number; join(x:string, y:string): string; } Math.join('1', '2'); Math.join('1', 2); // 0.0.7/buildInObjects4.ts:7:16 - error TS2345: Argument of type '2' is not assignable to parameter of type 'string'. // 7 Math.join('1', 2); 複製代碼
在推斷 Math.pow
類型定義的同時,順便造了一個 Math.join
,其輸入類型和輸出類型都是字符串,隨後調用這個方法時參數傳了數字類型,於是同 Math.pow(10, '3')
錯誤相似。app