tricks

type

使用 type 可以声明复杂的数据类型,比如

type Complex = {
  data: number[],
  output: (all: boolean) => number[]
}

let complex: Complex = {
  data: [10, 11],
  output: function(all:boolean) {
    return this.data;
  }
}

never 类型

多用于抛出错误时

function neverReturned(): never {
  throw new Error('some bad thing happens');
}

nullable类型

如果在 tsconfig 中设置

{
  "strictNullChecks": true
  // ...
}

则下面声明会报错

let canBeNull = null;
canBeNull = 12; // 报错

// 可以使用下面几种方式修正这种错误

#1 使用 any 声明
let canBeNull: any = null;
canBeNull = 12; // OK

#2 使用 union 声明
let canBeNull: number | null = null;
canBeNull = 12; // OK

#3 在tsconfig配置中 将 "strictNullChecks" 设置为 false
{
  "strictNullChecks": false
}

let canBeNull = null;
canBeNull = 12; // OK

私有构造器 private constructor && readonly

这个主要用处是,在运行时,只允许有一个实例存在,听起来像单例模式。

class OnlyOneInstance {
    private static instance: OnlyOneInstance;

    private constructor(public readonly name: string) {} // 只读

    static getInstance() {
        if (!OnlyOneInstance.instance) {
            OnlyOneInstance.instance = new OnlyOneInstance('The only one');
        }
        return OnlyOneInstance.instance;
    }
}

如果通过下面方式将报错

let wrong = new OnlyOneInstance()
// 错误
OnlyOneInstance 的构造器是私有的,只能通过class declaration来访问

// 使用下面方式 正确创建实例
let right = OnlyOneInstance.getInstance()

console.log(right.name) // 'The only one'

错误 Accessors are only available when targeting ECMAScript 5 and higher

遇见这个错误可以使用下面命令行

tsc index.ts -t ES5

你可能感兴趣的:(tricks)