如何定义对象文字部分属性的类型?

时间:2020-09-06 06:40:36

标签: typescript antd

这里有以下代码

const selectOptions = {
  mode: isTag ? 'tags' : 'combobox',
  ... //other stuff
}

return (<Select {...selectOptions}>...</Select>);

Type脚本将mode推断为字符串,但是Select仅占用type ModeOption = "default" | "multiple" | "tags" | "combobox",因此出现错误。

我当前的方式是执行mode: (isTag ? 'tags' : 'combobox') as ModeOption。但是我想避免使用as,有没有更好的方法?如何定义对象文字的仅几个属性的类型?

1 个答案:

答案 0 :(得分:2)

对于一般情况下,如果您希望避免自动类型扩展,可以使用as const

const selectOptions = {
  mode: (isTag ? 'tags' as const : 'combobox' as const),
}

as的其他用法不同,这些用法表示您正在根据编译器无法使用的 extra 信息声明类型,as const可能不是类型不安全的-它所做的只是告诉TS不要扩展类型,所以不要害怕使用它。

相关问题