typescript TS:将泛型类型与可选参数的默认值组合

gxwragnw  于 2023-03-24  发布在  TypeScript
关注(0)|答案(2)|浏览(208)

我有以下功能

function complete<T>(result?: T): void {
}

我想为result添加一个默认值:

function complete(result = null): void {
}

在这种情况下,T被推断为null

complete()  // result: T = null

complete(valueOfSomeType)  // result: T = SomeType

我试过了

function complete<T = null>(id: string, result: T = null): void {
}

但我得到了错误

Type 'null' is not assignable to type 'T'.
  'T' could be instantiated with an arbitrary type which could be unrelated to 'null'.ts(2322)

这可以说是

complete<SomeType>()

我该怎么补救呢?

mrwjdhj3

mrwjdhj31#

也许function complete<T>(result: T = null as T): void { }可以解决编译错误。

r1wp621o

r1wp621o2#

你可以重载你的函数来接受一个具有提供的泛型类型的参数,或者没有参数和默认值null

function complete<T>(result: T): void
function complete(): void
function complete<T>(result: T | null = null): void {
}

Playground

相关问题