类型区分

#tag

类型区分的笔记

any

一般情况下,我们并不知道某个变量的具体类型或者在编程过程中,因为一些原因我们并不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。一般这种情况为我们就会使用any这个类型声明

unknown

never

字面量类型

1
2
const msg0: 'Hello World' = 'Hello World' // 'hello World'字面量类型
let msg1: string = 'HelloWorld' // string类型

意义:结合 联合类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let align: 'left' | 'right' | 'center' = 'left'
align = 'right'
align = 'center'

align = 'xxxx' //error

=>

type Alignment = 'left' | 'right' | 'center'
let align: Alignment = 'left'
align = 'right'
align = 'center'

align = 'xxxx' //error

字面量推理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type Method = "GET" | "POST";

type Option = {
url: string;
method: Method;
};

function request(url: string, method: Method) {}

const option: Option = {
url: "",
method: "GET",
};

request(option.url, option.method);

1
2
3
4
5
6
7
8
9
10
11
type Method = "GET" | "POST";

function request(url: string, method: Method) {}

const option = {
url: "",
method: "GET",
} as const; // 字面量推理 保证里面的值是readonly

request(option.url, option.method);

函数类型

() => void

1
2
3
4
5
6
function foo() {}
type FooFnType = () => void
function bar(fn: FooFnType) {
fn()
}
bar(foo)

void

定义函数的返回类型为void时,返回什么类型都是可以的。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!