我有一个与此相似的界面:
interface ISomething<TMulti extends object> {
value: number | string;
text: string | TMulti;
}
文本部分可以是简单的字符串,也可以是实现某些特定接口的对象映射。在大多数情况下,它只是一个简单的不可为空的字符串,因此我想将TMulti
泛型类型的默认值设置为某种东西,以使该接口更容易使用。我的选择是
{}
null
never
最好的选择似乎是never
,但我从未见过它被用作默认的泛型类型,并且不确定string | never
的实际含义是什么?它与string
相同吗?其他两个选项都允许我将text
的值设置为一些不需要的值。
问题是:可以将类型never
用作通用类型的默认值,这是什么意思?
附加说明 :我在严格模式下使用Typescript,因此
string
不能满足每个编译器要求,这也是我想要的。
答案 0 :(得分:1)
是的,您可以将never
作为默认值:
interface ISomething<TMulti extends object = never> {
value: number | string;
text: string | TMulti;
}
const a: ISomething = {
value: 'str',
text: 'str'
}
const b: ISomething<{ example: string }> = {
value: 2,
text: {
example: 'str'
}
}
上面的示例表明,在不指定类型的地方,它知道text
应该是字符串。因此,never
是一个不错的选择,对此表示祝贺,因为我只是确认您的正确建议而感到欺诈。