这里有以下代码
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,有没有更好的方法?如何定义对象文字的仅几个属性的类型?
答案 0 :(得分:2)
对于一般情况下,如果您希望避免自动类型扩展,可以使用as const
:
const selectOptions = {
mode: (isTag ? 'tags' as const : 'combobox' as const),
}
与as
的其他用法不同,这些用法表示您正在根据编译器无法使用的 extra 信息声明类型,as const
可能不是类型不安全的-它所做的只是告诉TS不要扩展类型,所以不要害怕使用它。