“索引签名参数类型不能是联合类型。” – 我应该用什么来代替?

2024-01-16

当我尝试编译此 Typescript 代码时

interface Foo { 
    [foo: "hello" | "world"]: string;
}

我收到此错误消息

索引签名参数类型不能是联合类型。考虑改用映射对象类型。

什么是映射对象类型,如何使用它?


映射的对象类型对一组单例类型进行操作,并生成一个新的对象类型,其中每个单例都将转换为属性名称。

例如,这个:

type Foo = {
    [K in "hello" | "world"]: string
};

将相当于

type Foo = {
    "hello": string;
    "world": string;
};

请记住,映射的对象类型是不同的类型运算符 - 大括号中的语法不能在接口或具有其他成员的对象类型中使用。例如

interface Foo {
    [K in "hello" | "world"]: string; // ❌
}

产生以下错误:

A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.

映射的对象类型对于许多不同的事情都很有用。在这里阅读更多内容:https://www.typescriptlang.org/docs/handbook/2/mapped-types.html https://www.typescriptlang.org/docs/handbook/2/mapped-types.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“索引签名参数类型不能是联合类型。” – 我应该用什么来代替? 的相关文章