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