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



这里有以下代码

const selectOptions = {
mode: isTag ? 'tags' : 'combobox',
... //other stuff
}
return (<Select {...selectOptions}>...</Select>);

mode被 TypeScript 推断为字符串,但Select只需要type ModeOption = "default" | "multiple" | "tags" | "combobox"所以会出现错误。

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

对于要避免自动类型扩展的一般情况,可以使用as const

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

as的其他用法不同,这些用法指示您根据编译器不可用的额外信息断言类型,as const并非潜在的类型不安全 - 它所做的只是告诉 TS 不要扩大类型,所以不要害怕使用它。

最新更新