Javascript 如何根据参数';用打字机打字
我想根据参数的类型推断返回类型 这是我的尝试Javascript 如何根据参数';用打字机打字,javascript,typescript,Javascript,Typescript,我想根据参数的类型推断返回类型 这是我的尝试 type Arg = string | (() => string) function fn1(arg: Arg): typeof arg extends Function ? () => string : string { if (typeof arg === "function") { return () => arg(); } return arg; } const a = fn1
type Arg = string | (() => string)
function fn1(arg: Arg): typeof arg extends Function ? () => string : string {
if (typeof arg === "function") {
return () => arg();
}
return arg;
}
const a = fn1("hello") // a should be "string"
const b = fn1(() => "hello") // b should be () => "string"
不幸的是,我不知道为什么typescript在第return()=>arg()
行失败,并出现一个错误Type'()=>string'不可分配给Type'string'
,其中此行在if语句中。使用:
.为什么不直接返回
arg
本身呢?这只是一个例子:)在“现实生活”中,arg
函数得到一个参数并进行一些计算。这是否回答了您的问题?这个功能的目的是什么?看起来它正在经历身份危机。为什么不做两个函数:typefxna=(string)=>string代码>和类型FxnB=(函数)=>Function
。然后,在调用这些函数之前,可以将您的typeof
检查拉出这些函数之外。示例2不起作用c
和d
应该调用fn2
@Nenad my bad。从答案中删除。让第二个示例起作用会很好,但由于某些原因它不起作用。如果约束函数的返回类型,则函数体中会出现错误-返回类型不匹配。
function fn1(arg: string): string;
function fn1(arg: () => string): () => string;
function fn1(arg: string | (() => string)){
if (typeof arg === 'function'){
return () => arg();
}
return arg;
}
const a = fn1("hello");
const b = fn1(() => "hello");