TS 类型

157 阅读1分钟

原始数据类型

布尔值

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