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;