阅读 1242

Typescript 内置对象

Typescript 数组类型 这篇文章末我们提及到了 Typescripe 一种内置对象

在 Typescript 中内置对象是作为已经定义好(内置)的类型去使用的,很显然它是存在全局作用域(Global)上

ECMAScript 内置对象

Boolean 这个内置对象来说吧,这样的对象在 ECMAScript 中有很多。

// 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 行能正常运行的原因了。

DOM 与 BOM 内置对象

// buildInObjects2.ts
const body: HTMLElement = document.body;
const divList: NodeList = document.querySelectorAll('div');
document.addEventListener('click', (e: MouseEvent) => {
    // do something
});
复制代码

示例中 HTMLElementNodeListMouseEvent 就是 DOM 与 BOM 内置对象。

总结:不管 ECMAScript 内置对象还是 DOM 与 BOM 的内置对象,其文件定义在 TypeScript 核心库的文件 中。下面就说说它。

在 Node.js 中应用

是不是也内置了呀?这个,这个不是了。你得引入第三方声明文件。这里牵扯到声明文件,下一篇内容我们来说说。

npm install @types/node --save-dev
复制代码

TypeScript 核心库的文件

它定义了浏览器环境所有类型,预置在 Typescript 中,所以我们能随手拿来用。而这些文件都帮我们做了很多判断工作了(一个字省心)。

// 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 是这么定义的

// 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') 错误类似。

本次代码 Github

你可以...

上一篇:Typescript 函数类型

下一篇:Typescript 元祖

目录:Typescript 小书之入门篇