打字稿通用类型默认不使用时

时间:2018-11-30 08:43:58

标签: typescript generics

我有一个与此相似的界面:

interface ISomething<TMulti extends object> {
    value: number | string;
    text: string | TMulti;
}

文本部分可以是简单的字符串,也可以是实现某些特定接口的对象映射。在大多数情况下,它只是一个简单的不可为空的字符串,因此我想将TMulti泛型类型的默认值设置为某种东西,以使该接口更容易使用。我的选择是

  • {}
  • null
  • never

最好的选择似乎是never,但我从未见过它被用作默认的泛型类型,并且不确定string | never的实际含义是什么?它与string相同吗?其他两个选项都允许我将text的值设置为一些不需要的值。

问题是:可以将类型never用作通用类型的默认值,这是什么意思?

  

附加说明 :我在严格模式下使用Typescript,因此string不能满足每个编译器要求,这也是我想要的。

1 个答案:

答案 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是一个不错的选择,对此表示祝贺,因为我只是确认您的正确建议而感到欺诈。

相关问题