Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据参数';用打字机打字_Javascript_Typescript - Fatal编程技术网

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");