Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Typescript 如果没有类型变量,如何推断返回类型?_Typescript - Fatal编程技术网

Typescript 如果没有类型变量,如何推断返回类型?

Typescript 如果没有类型变量,如何推断返回类型?,typescript,Typescript,我的目标是创建一个函数,克隆一个数组,并保留类型。使用此代码,typescript将返回类型声明为任意: 导出函数someFn(输入阵列){ 返回[…输入阵列]; } //结果将有任何[]作为类型 const result=someFn([1,2,3]); 我如何告诉typescript,someFn的返回类型将与输入的类型相同(即在本例中是一个数字数组) 解决方法 我知道我可以用类型变量来实现这一点: 导出函数someFn(输入阵列):T[]{ 返回[…输入阵列]; } //结果将数字[]作

我的目标是创建一个函数,克隆一个数组,并保留类型。使用此代码,typescript将返回类型声明为任意:

导出函数someFn(输入阵列){
返回[…输入阵列];
}
//结果将有任何[]作为类型
const result=someFn([1,2,3]);
我如何告诉typescript,
someFn
的返回类型将与输入的类型相同(即在本例中是一个数字数组)

解决方法

我知道我可以用类型变量来实现这一点:

导出函数someFn(输入阵列):T[]{
返回[…输入阵列];
}
//结果将数字[]作为类型(但仅因为我输入了T作为数字)
const result=someFn([1,2,3]);

我希望避免上述解决方法,因为它迫使我事先声明类型。

如果您键入的参数依赖于
T
(在下面的示例中
T[]
),则将从参数推断泛型,而无需在调用时指定它:

function someFn<T>(inputArray: T[]): T[] {
  return [...inputArray];
}

const result = someFn([1, 2, 3]); // `result` will be of type `number[]`
函数someFn(输入阵列:T[]):T[]{ 返回[…输入阵列]; } const result=someFn([1,2,3]);/`result`的类型为`number[]`
即使您说不想使用泛型类型,这也是正确的答案。但是您的声明没有充分利用它:

export function someFn<T>(inputArray: T[]): T[] {
    return [...inputArray];
}

const numberResult: number[] = someFn([1, 2, 3]);       //correct
const stringResult: string[] = someFn(["a", "b", "c"]); //correct
const mixedResult: string[] = someFn(["a", 2]);         //error
导出函数someFn(输入阵列:T[]):T[]{
返回[…输入阵列];
}
常量numberResult:number[]=someFn([1,2,3]);//正确
const stringResult:string[]=someFn([“a”、“b”、“c”]);//正确
const mixedResult:string[]=someFn([“a”,2]);//错误


如果声明输出将是与输入类型相同的数组,则无需显式指定泛型类型参数。

我不确定泛型为什么不可取。我缺少
t[]
在函数的参数上,最后一项mixedResult的点是什么,表示
//错误
-您的意思是类型应该是
string | number[]
?我现在明白了-您可以说明typescript明白这不是类型-现在只要打开操场就有意义。这意味着如果您尝试将
(数字字符串)[
分配给
字符串[]
,typescript将complain@DauleDK因为
mixedResult
被声明为
string[]
。希望表明您维护了类型安全性,因为
someFn
生成
(字符串|编号)[
,而不仅仅是字符串数组。