相关疑难解决方法(0)

打字稿:接口与类型

这些语句(接口与类型)之间有什么区别?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};
Run Code Online (Sandbox Code Playgroud)

typescript

516
推荐指数
16
解决办法
9万
查看次数

使用枚举键入接口字段的索引签名?

我可以用对象类型表示法描述索引类型限制,如下所示:

enum Enum {
    A = 0,
    B = 1,
}

type EnumMap = {
    [P in Enum]: string;
}
Run Code Online (Sandbox Code Playgroud)

但是,令人惊讶的是,在接口中使用索引符号时似乎不可能做到这一点:

enum Enum {
    A = 0,
    B = 1,
}

interface EnumMap {
    [P in Enum]: string;
}
Run Code Online (Sandbox Code Playgroud)

错误是:

计算属性名称的类型必须为“字符串”、“数字”、“符号”或“任意”。

有什么原因吗?根据定义,TypeScript 中的枚举只能有字符串或数字值(甚至两者都有,但不推荐这样做),我认为枚举本身对于它列出的所有值都可以像联合类型一样工作。


进一步调查,我还发现,在下面的例子中,EnumValues有 type number, 而不是 (我期望的) 0 | 1。再次,为什么会这样?

const Enum = {
    A: 0,
    B: 1
};

type EnumKeys = keyof typeof Enum;
type EnumValues = typeof Enum[EnumKeys];
Run Code Online (Sandbox Code Playgroud)

enums interface typescript typescript2.0

8
推荐指数
1
解决办法
880
查看次数

标签 统计

typescript ×2

enums ×1

interface ×1

typescript2.0 ×1