TS 中常用的基本类型

# TS 中常用的基本类型

  • number 数字
  • string 字符串
  • boolean 布尔值 true/false
  • 字面量 限制变量的值就是该字面量的值
  • any 任意类型
  • unknown 类型安全的 any
  • void 没有值(或 undefined)
  • never 不能是任何值
  • object js 对象
  • array js 数组
  • tuple js 元组(定长的数组类似于 Python中的 Tuple 表现形式为:[1,2])
  • enum 枚举

# 联合类型

通过 “或运算符” 来连接多个类型

# 字面量

let sex: 'man' | 'woman'
sex = 'man';
sex = 'woman';

# any

任意类型,不做任何类型限制。

let a:any;
a = 1;
a = 'str';
a = true;

如果声明时不指定任意类型的话,ts解析器会隐式的将变量设置为 any 类型

let a;
// 此时 a 的类型是 any

变量赋值

let a;
let b:string
a = 10
b = a;
// 并不会报错

# unknown

任意类型,只作用于本身,不能直接赋值给其他变量

let s:unknown;
s = 10;
let a:string;
a = s;
// 会报错 Type 'unknown' is not assignable to type 'string'.

# 类型断言

使用 as 来告诉解析器我们的 unknow 的变量是一个什么类型(或使用 )

let s: unknown;
s = 10;
let a: string;
a = <string>s;
a = s as string;

或使用 typeof 来判断变量的类型

# void 和 never

当函数没有返回值的时候 使用 void

function foo() :void{
   // return
}

或者是当函数返回 undefined、null

never 是不会有任何返回值,多用于抛出异常

function test():never{
    throw Error('err')
}

# object

在 JS 中一切皆对象,如果给一个变量限制为 object 没有任何作用。

let a: object;
a = [];
a = function () { }
a = new Date()
// 并不会报错

我们主要是为了限制对象中属性的类型,那么可以这样来限制对象的结构:

let a: {
    name: string,
    age: number
}

a = { name: 'zhang san', age: 18 }

但是这样做的话,你的类型定义的结构和赋值后对象的结构必须保持一致。如果不同会报错。

let a: {
    name: string,
    age: number
}

a = { name: 'zhang san', age: 18, home: 'shen zhen' }
// 报错

可以通过 ? 将参数类型变为可选

let a: {
    name: string,
    age: number,
    home?: string
}

a = { name: 'zhang san', age: 18 }
// 不会报错

如果有多个未知的属性,或者说只限制某几个属性的话可以使用这种方式:

let a: {
    name: string,
    [propnames: string]: string | number, // 可以使用 any 表示不对其他属性做任何限制。
}

a = { name: 'zhang san', age: 18, home: 'shen zhen' }

# 函数限制

使用箭头函数的形式来返回对函数的结构限制 括号内是对参数结构的限制,箭头处是对返回值的限制。

let foo: (a: number, b: string) => string;
foo = function (a, b) {
    return 's'
}

# 数组的限制

let foo: string[];
let boo: Array<number | string>
boo = [1, 2, 3, 4, '5']
foo = ['1', '2']

# tuple 元组

元组比较像坐标形如 [1,2]

let n: [number, string]
n = [1, '2']

# enum 枚举

enum Flower {
    rose = 0,
    jasmine = 1
}

let a: { flower: Flower }
a = {
    flower: 0
}

# & 运算符连接条件

enum Flower {
    rose = 0,
    jasmine = 1
}

let a: { flower: Flower } & { name: string }
a = {
    flower: 0,
    name:'zhang san'
}

# 类型别名

简化操作

type flowes = 1 | 10 | 100 | 1000 | 10000

let a: flowes = 1;
let b: flowes = 10;
let c: flowes = 100;
let d: flowes = 1000;
let e: flowes = 10000;