Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用时的Typescript泛型类型默认值_Typescript_Generics - Fatal编程技术网

不使用时的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不存在时,该属性就不存在?