iro*_*nic 16 indexing enums dictionary typescript
考虑以下示例.
enum DialogType {
Options,
Help
}
class Dialog {
test() : string {
return "";
}
}
class Greeter {
openDialogs: { [key in DialogType]: Dialog | undefined } = {
0: undefined,
1: undefined
};
getDialog(t: DialogType) {
return this.openDialogs[t];
}
}
const greeter = new Greeter();
const d = greeter.getDialog(DialogType.Help);
if (d) document.write(d.test());
Run Code Online (Sandbox Code Playgroud)
它有3个问题/问题:
Tit*_*mir 31
|undefined
不会使属性可选,只是意味着它可以undefined
,有一个建议使|undefined
成员可选,但目前它没有实现.您需要使用?
after ]
来使所有属性可选
{ [key in DialogType]?: Dialog }
Run Code Online (Sandbox Code Playgroud)您可以使用对话框枚举值作为键,但它们需要是计算属性:
let openDialogs: { [key in DialogType]?: Dialog } = {
[DialogType.Options]: undefined,
};
Run Code Online (Sandbox Code Playgroud){ [key: number or string]: Dialog }
是一个索引签名.索引签名仅限于number
或string
作为密钥类型(即使两者的联合也不起作用).因此,如果您使用索引签名,则可以按任意number
或string
(我们不能仅限于DialogType
键)进行索引.您在此处使用的概念称为映射类型.映射类型基本上基于键的并集(在这种情况下是DialogType枚举的成员)和一组映射规则生成新类型.我们上面创建的类型基本上等同于:
let o: { [DialogType.Help]?: Dialog; [DialogType.Options]?: Dialog; }
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
8792 次 |
最近记录: |