分类 前端 articles

Typescript 注释指令

TypeScript 接受一些注释指令。 所谓“注释指令”,指的是采用 JS 双斜杠注释的形式,向编译器发出的命令。 // @ts-nocheck // @ts-nocheck告诉编译器不对当前脚本进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。 // @ts-nocheck const element = document.getElementById(123); 上面示例中,document.getElementById(123)存在类型错误,……

Continue reading

Typescript 类型工具

TypeScript 提供了一些内置的类型工具,用来方便地处理各种类型,以及生成新的类型。 TypeScript 内置了17个类型工具,可以直接使用。 Awaited<Type> Awaited<Type>用来取出 Promise 的返回值类型,适合用在描述then()方法和 await 命令的参数类型。 // string type A = Awaited<Promise<string>>; 上面示例中,Awaited<Type>……

Continue reading

Typescript 类型映射

简介 映射(mapping)指的是,将一种类型按照映射规则,转换成另一种类型,通常用于对象类型。 举例来说,现有一个类型A和另一个类型B。 type A = { foo: number; bar: number; }; type B = { foo: string; bar: string; }; 上面示例中,这两个类型的属性结构是一样的,但是属性的类型不一样。如果属性数量多的话,逐个写起来就很麻烦。 使用类……

Continue reading

Typescript 类型运算符

keyof 运算符 简介 keyof 是一个单目运算符,接受一个对象类型作为参数,返回该对象的所有键名组成的联合类型。 type MyObj = { foo: number, bar: string, }; type Keys = keyof MyObj; // 'foo'|'bar' 上面示例中,keyof MyObj返回MyObj的所有键名组成的联合类型,即'foo'|'bar'。 下面是另一个例子。 interface T { 0: boolean; a: string; b(): void; } type KeyT = keyof T; // 0 | 'a'……

Continue reading

Typescript 类型声明文件

简介 单独使用的模块,一般会同时提供一个单独的类型声明文件(declaration file),把本模块的外部接口的所有类型都写在这个文件里面,便于模块使用者了解接口,也便于编译器检查使用者的用法是否正确。 类型声明文件里面只有类型代码,没有具体的代码实现。它的文件名一般为[模块名].……

Continue reading

Typescript Declare关键字

简介 declare 关键字用来告诉编译器,某个类型是存在的,可以在当前文件中使用。 它的主要作用,就是让当前文件可以使用其他文件声明的类型。举例来说,自己的脚本使用外部库定义的函数,编译器会因为不知道外部函数的类型定义而报错,这时就可以在自己的脚本里面使用declare关键字,告诉编译器外部函数……

Continue reading

Typescript 模块

简介 任何包含 import 或 export 语句的文件,就是一个模块(module)。相应地,如果文件不包含 export 语句,就是一个全局的脚本文件。 模块本身就是一个作用域,不属于全局作用域。模块内部的变量、函数、类只在内部可见,对于模块外部是不可见的。暴露给外部的接口,必须用 export 命令声明;如果其他文件要使用模块的接……

Continue reading

Typescript 类型断言

简介 对于没有类型声明的值,TypeScript 会进行类型推断,很多时候得到的结果,未必是开发者想要的。 type T = 'a'|'b'|'c'; let foo = 'a'; let bar:T = foo; // 报错 上面示例中,最后一行报错,原因是 TypeScript 推断变量foo的类型是string,而变量bar的类型是'a'|'b'|'c',前者是后者的父类型。父类型不能赋值……

Continue reading

Typescript Enum类型

简介 实际开发中,经常需要定义一组相关的常量。 const RED = 1; const GREEN = 2; const BLUE = 3; let color = userInput(); if (color === RED) {/* */} if (color === GREEN) {/* */} if (color === BLUE) {/* */} throw new Error('wrong color'); 上面示例中,常量RED、GREEN、BLUE是相关的,意为变量color的三个可能的取值。它们具体等于什么值其实并不重要,只要不相等就可以了。 TypeScript 就设计了 Enum 结构,……

Continue reading

Typescript 泛型

简介 有些时候,函数返回值的类型与参数类型是相关的。 function getFirst(arr) { return arr[0]; } 上面示例中,函数getFirst()总是返回参数数组的第一个成员。参数数组是什么类型,返回值就是什么类型。 这个函数的类型声明只能写成下面这样。 function f(arr:any[]):any { return arr[0]; } 上面的类型声明,就反映不出参数与返回值之间的类型关系。 为了解决这……

Continue reading