TypeScript



奇技淫巧

declare global {
  interface Window {
    replaceState: boolean;
  }
}

(<any>window)['someProperty']
(window as any)['someProperty']

目录

Typescript
├ TSLint ✔
├ 手册指南
│ ├ interface
│ ├ implements
│ └ Generic
├ 声明文件
└ 项目配置

ES版本与TS关系: image

待解决

  • 类型注解
  • 接口

基础类型

boolean
number
string

数组

// 方括号
let list:number[] = [1, 2, 3];

// Array Generic (数组泛型)
let list:Array<number> = [1, 2, 3];

// 接口
interface NumberArray {
    [index: number]: number;
}
let list: NumberArray = [1, 2, 3];

// Array-like Object (类数组)
// IArguments, NodeList, HTMLCollection

?

// Tuple
let x: [string, number];
// enum
// any
// void
function warnUser(): void {
    console.log("This is my warning message");
}
// null undefiled
// 可以把 null和undefined赋值给number类型的变量
// --strictNullChecks
// never
// object

类型断言

let strLength: number = (<string>someValue).length;
let strLength: number = (someValue as string).length;

泛型

function createArray<T>(length: number, value: T): Array<T> {
    let result: T[] = [];
    for (let i = 0; i < length; i++) {
        result[i] = value;
    }
    return result;
}

在函数内部使用泛型变量的时候,由于事先不知道它是哪种类型,所以不能随意的操作它的属性或方法:

function loggingIdentity<T>(arg: T): T {
    console.log(arg.length);
    return arg;
// index.ts(2,19): error TS2339: Property 'length' does not exist on type 'T'.
}

可以对泛型进行约束,只允许这个函数传入那些包含 length 属性的变量。这就是泛型约束:

interface Lengthwise {
    length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);
    return arg;
}

编码规范

更新时间:2025-03-13 13:12:30