原始数据类型
布尔值
let isDone: boolean = false
数字
let num: number = 1
字符串
let name: string = 'xxx'
null | undefined
let n: null = null
let u: undefined = undefined
TS特有类型
空值(void)
可以用 void 表示没有任何返回值的函数
function fn(): void{
console.log('输出')
}
任意值(any)
如果是一个普通类型,在赋值过程中改变类型是不被允许的。 any类型可以被修改
let name: string = 'xxx'
name = 7
// 报错 Type 'number' is not assignable to type 'string'
let name: any = 'xxx'
name = 7
// 不报错
空值(unknown)
可以赋值任意值
let value:unknown;
value = ture;
value = 1;
无法使用方法及属性
let name: unknown = 'xxx'
name.length // 报错 类型“unknown”上不存在属性“length”
如需要使用方法或属性
// 断言
let name:unknown;
name = 'xxx';
(value as string).length
// 类型保护
if (typeof name === 'string') {
console.log(name.length)
}
从不出现(never)
要是出现never 大概率代码出错了
interface Foo { type: 'foo' }
interface Bar { type: 'bar' }
type All = Foo | Bar
function handleValue(val: All) {
switch (val.type) {
case 'foo':
// 这里 val 被收窄为 Foo
break
case 'bar':
// val 在这里是 Bar
break
default:
// val 在这里是 never
const exhaustiveCheck: never = val
break
}
}
枚举(enum)
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
console.log(Days["Sun"] === 0); // true
console.log(Days["Mon"] === 1); // true
console.log(Days["Tue"] === 2); // true
console.log(Days["Sat"] === 6); // true
console.log(Days[0] === "Sun"); // true
console.log(Days[1] === "Mon"); // true
console.log(Days[2] === "Tue"); // true
console.log(Days[6] === "Sat"); // true