• 快速声明对象/数组

  • 属性不明确的情况;

Only some types are allowed for index signature properties: string, number, symbol, template string patterns, and union types consisting only of these.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface StringArray {
[index: number]: string;
}

type IndexSign = {
[key: number]: string;
};

const foo7: StringArray = {
1: "foo",
2: "foo",
};
// invk
foo7[1]
foo7[2]

In

可用类型别名,而不能用在 interface 上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

type A1 = {
[k in string]: number
}
type A1 = {
[k: string]: number
}
// 类型别名中不能出现 in 关键字
interface A2 {
[k: string]: number
}

type A3 = Record<string, number> // 通过创造类型

type A4 = {
age: number;
}

// 上面两种写法一致。

如何声明一个对象或者数组

一般可以通过索引签名的方式

1
2
3
4
5
6
7
8
9
10
11
type A = {
[k: string]: number
}

type A2 = Record<string, number>

// 上面两种写法一致。
type A3 = {
name: string;
age: number;
}

如何描述数组?

一般通过三种方式描述数组

1
2
3
4
type A = string[];
type A = Array<string>;

type A = [string, number]; // -- 精确描述