函数包装泛型类型确定

问题描述 投票:0回答:1
function callbackWrapper<T = string>(cb?: () => T): T  {
    return cb?.() ?? 'default value';
  }
 
const a = callbackWrapper(() => 7); // a should be number
const b = callbackWrapper(() => true); // b should be boolean
const c = callbackWrapper(() => 'string'); // c should be string
const d = callbackWrapper(); // d should be string ('default value')

enter image description here

如何更改函数callbackWrapper标头类型,这样返回类型就不会抛出错误

尝试了强制转换返回类型,它有效,但是您可以再次使用“7 asknown as string[]”强制转换任何内容,并且它将有效。所以这不是解决方案

typescript generics types
1个回答
0
投票

由于

callbackWrapper
可以返回参数类型
T
给定的任何类型,因此返回类型可能与
'default value'
不兼容。

相反,您应该明确声明您希望返回

T
'default value'
(或
string
):

function callbackWrapper<T = string>(cb?: () => T): T|'default value'  {
  return cb?.() ?? 'default value';
}
© www.soinside.com 2019 - 2024. All rights reserved.