TS:结合泛型和可选参数的默认值

问题描述 投票:0回答:2

我有以下功能

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>()

我该如何解决这个问题?

typescript generics default
2个回答
1
投票

也许

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


0
投票

您可以重载您的函数以接受具有提供的泛型类型或没有参数和默认值的参数

null

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

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.