any类型
- 不使用此类型
any表示全集,所有类型的集合,
unknown类型
unknown表示未知集,不知道什么类型const a: unknown = 100 // a.toFixed() // 报错,对象的类型为 "unknown" // 使用断言 as (a as number).toFixed()
never类型
- 一般不使用此类型
never表示空集type A = string & number // A 为 never
enum
- 枚举
- 一般使用
number enum - 显然 Fruit1 没有 Fruit2 优雅
enum A {
todo = 0, // 不设置时默认为 0
done, // 1 自动从上一个值基础上递增
archived, // 2
deleted // 3
}
enum Fruit1 {
apple = 'apple',
banana = 'banana'
}
type Fruit2 = 'apple' | 'banana'
type
类型别名 Type Aliases (给类型取一个名字)
// string 类型
type S = string
//联合类型
type FalseLike = '' | 0 | false | null | undefined
// 函数
type Fn = (n: number, m: number) => number
// 带属性的函数
type FnWithProps = {
(a: number, b: number): number
prop: string
}
const fn_prop: FnWithProps = (a, b) => 100
fn_prop.prop = '函数的属性' // 不注明属性报错
interface
声明接口,描述对象的属性(declare the shapes of objects)
interface Data {
[k: string]: string
}
interface Point {
x: number
y: number
}
interface Points extends Array<Point> { }
interface Date2 extends Date {}
interface Fn { // 带属性的函数
(x: number, y: number): number
prop: number
}
const fn: Fn = (a, b) => 900
fn.prop = 180 // 不注明属性报错
// 扩展String方法padZero
declare global {
interface String {
padZero(length: number): number
}
}
type VS interface
区别:
interface只描述对象类型,type是描述所有类型;interface是类型声明,type则是给类型起一个别名;interface会自动合并,多用于对外API,方便扩展,type不可重新赋值,一般用于对内API, 防止代码分散;