首页 > 解决方案 > 枚举映射的打字稿转换问题

问题描述

我有以下打字稿模型:

enum Metric {
    COLOR = 'COLOR',
    SIZE = 'SIZE'
};

interface Stats {
    id: number;
    metrics: {[key: number]: {[metricKey in Metric]?: number }};
}

我尝试将一些对象投射到Stats

const ok = {
    id: 10
} as Stats;

const notOk = {
    metrics: {
        0: {
            [Metric.COLOR]: 10
        }
    }
} as Stats;

我不明白为什么第一个可以,但第二个不行。它触发TS2352 输入“统计”可能是一个错误,因为这两种类型都没有充分重叠。如果这是故意的,请先将表达式转换为“未知”。

如果可能的话,我不想使用as unknown as Stats

这里是打字稿游乐场

标签: typescriptcasting

解决方案


id中缺少的成员notOk。此代码有效:

enum Metric {
    COLOR = 'COLOR',
    SIZE = 'SIZE'
};

interface Stats {
    id: number;
    metrics: {[key: number]: {[metricKey in Metric]?: number }};
}

const ok = {
    id: 10
} as Stats;

const notOk = {
    id: 1,
    metrics: {
        0: {
            [Metric.COLOR]: 10
        }
    }
} as Stats;

推荐阅读