File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed
docs/documentation/zh/handbook-v2/Type Manipulation Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ title : Keyof 类型运算符
3
+ layout : docs
4
+ permalink : /zh/docs/handbook/2/keyof-types.html
5
+ oneline : " 在类型上下文中使用keyof运算符"
6
+ ---
7
+
8
+ ## ` keyof ` 类型运算符
9
+
10
+ ` keyof ` 操作符接受一个对象类型,并且会将该对象的key值进行联合生成一个由字符串或数字组成的文字串。
11
+ 以下类型 P 与类型 "x" | "y" 是等价的:
12
+
13
+ ``` ts twoslash
14
+ type Point = { x: number ; y: number };
15
+ type P = keyof Point ;
16
+ // ^?
17
+ ```
18
+
19
+ 如果类型具有` string ` 或` number ` 的索引签名,` keyof ` 则将返回索引的类型:
20
+
21
+ ``` ts twoslash
22
+ type Arrayish = { [n : number ]: unknown };
23
+ type A = keyof Arrayish ;
24
+ // ^?
25
+
26
+ type Mapish = { [k : string ]: boolean };
27
+ type M = keyof Mapish ;
28
+ // ^?
29
+ ```
30
+
31
+ 值得注意的是,上面例子中, ` M ` 是 ` string | number ` -- 这是因为JavaScript中对象的键始终会强制转换成字符串,所以 ` obj[0] ` 与 ` obj["0"] ` 是等价的。
32
+
33
+ 当` keyof ` 与映射类型结合使用时,将变得特别有用,稍后我们会详细了解。
You can’t perform that action at this time.
0 commit comments