Notes
TypeScript
类型别名和断言

类型别名

类型别名(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 等等。