“考虑改为使用映射的对象类型。” -什么是映射对象类型,在这里如何使用?

时间:2018-08-02 17:43:36

标签: typescript

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

我收到一条类似的错误消息

An index signature parameter type cannot be a union type. Consider using a mapped object type instead.

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

1 个答案:

答案 0 :(得分:13)

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

例如,此:

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.

映射对象类型可用于许多不同的事情。在此处阅读更多信息:http://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types