声明界面{类型:1 | 2},为什么不能为其分配{type:1}

时间:2019-06-13 09:35:43

标签: typescript

interface Question {
    type: 1 | 2
}

const obj = { type: 1 };
let question: Question;
question = obj; // not work

错误是:

  

Type'{type:number; }”不可分配给“问题”类型。种类   属性“类型”不兼容。       类型'number'不能分配给类型'1 | 2'。

为什么?我将Question用作React props类型检查器,但无法将obj作为props传递给组件。

1 个答案:

答案 0 :(得分:5)

这是由于类型扩展。在{ type: 1 }中,type被推断为number,而不是常数1。如果要防止这种情况发生,可以通过添加as const将其定义为常量:

interface Question {
    type: 1 | 2
}

const obj = { type: 1 as const }; // "as const" will prevent type widening here
let question: Question;
question = obj;