不使用时的Typescript泛型类型默认值
我有一个类似的界面:不使用时的Typescript泛型类型默认值,typescript,generics,Typescript,Generics,我有一个类似的界面: interface ISomething<TMulti extends object> { value: number | string; text: string | TMulti; } 文本部分可以是简单的字符串,也可以是实现特定接口的对象映射。在大多数情况下,它将只是一个简单的不可为null的字符串,因此我想将TMulti泛型类型默认值设置为一些东西,以避免使用此接口。我的选择是 {} 无效的 从不 最好的选择似乎是“从不”,但我从未见过
interface ISomething<TMulti extends object> {
value: number | string;
text: string | TMulti;
}
文本部分可以是简单的字符串,也可以是实现特定接口的对象映射。在大多数情况下,它将只是一个简单的不可为null的字符串,因此我想将TMulti泛型类型默认值设置为一些东西,以避免使用此接口。我的选择是
{}
无效的
从不
最好的选择似乎是“从不”,但我从未见过它被用作泛型类型默认值,也不确定字符串类型“从不”实际上意味着什么?它和字符串一样吗?另外两个选项都允许我将文本的值设置为不需要的值
问题是:类型永远不能用作泛型类型默认值,在这种情况下它意味着什么
附加说明:我在严格模式下使用Typescript,所以根据编译器的要求,字符串不能为null,这也是我想要的
是的,您可以使用“从不”作为默认值:
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'
}
}
上面的例子表明,如果不指定类型,它知道文本应该是字符串。因此,never是一个不错的选择,值得祝贺,因为我觉得只要确认您的正确建议就有欺诈行为。可能有用,PR介绍never:。您可以在那里找到:因为从不是每种类型的子类型,所以它总是从联合类型中被忽略,并且只要返回其他类型,它就会在函数返回类型推断中被忽略。那么,ISomething中具有属性manNotBe:TMulti的属性会发生什么情况呢。这是否意味着当TMulti不存在时,该属性就不存在?