类型别名和断言
类型别名
类型别名(Type Aliases)是 TypeScript 1.9 版本中引入的新特性,它可以给一个类型起一个新的名字。
type PlusType = (x: number, y: number) => number;
function add(x: number, y: number): number {
return x + y;
}
const add2: PlusType = add;
另一个例子:
type NameResolver = () => string;
type NameOrResolver = string | NameResolver;
function getName(n: NameOrResolver): string {
if (typeof n === "string") {
return n;
} else {
return n();
}
}
类型断言
类型断言(Type Assertion)可以用来手动指定一个值的类型。
function getLength(input: string | number): number {
const str = input as String; // 类型断言,注意这里的写法,String 不是 string,这里是一个对象
if (str.length) {
return str.length;
} else {
const number = input as Number;
return number.toString().length;
}
}
或者可以这样写:
function getLength(input: string | number): number {
const str = <string>input; // 类型断言
if (str.length) {
return str.length;
} else {
const number = <number>input;
return number.toString().length;
}
}
声明文件
声明文件(Declaration Files)是一个全局的概念,它是用来描述一个库的 API 的,比如 jQuery、React、Vue 等等。
例如,我们想使用 jQuery,那么我们需要引入 jQuery 的声明文件:
// index.ts
import $ from 'jquery';
declare var jQuery: (selector: string) => any;
可以将这个文件命名为 index.d.ts
,然后在 tsconfig.json
中配置 "include": ["index.d.ts"]
。在别的文件中就可以使用 jQuery 了。
// index.ts
import $ from 'jquery';
jQuery('#foo');
实际上,jQuery 的声明文件已经在 @types/jquery
中了,我们可以直接安装使用:
npm install @types/jquery --save-dev
这里的 @types
是一个 npm 包,它包含了很多第三方库的声明文件。包括但不限于:jQuery、React、Vue、Angular、Node 等等。