Typescript 打字稿。返回参数类型的数组

Typescript 打字稿。返回参数类型的数组,typescript,return-type,Typescript,Return Type,在不使用泛型的情况下,是否可以将上述函数中的返回类型指定为参数元素的类型 function last(anArray:any[]) /*:????*/ { return anArray[anArray.length-1]; } 编辑:看到@Titian Cernicova Dragomir给出的好答案,我应该说“调用函数时不使用泛型”不知道为什么要说“不使用泛型”。这正是typescript中使用泛型的原因。使用泛型并不难: let strs:string[]=["aaa","bbb"

在不使用泛型的情况下,是否可以将上述函数中的返回类型指定为参数元素的类型

function last(anArray:any[]) /*:????*/ {
    return anArray[anArray.length-1];
}

编辑:看到@Titian Cernicova Dragomir给出的好答案,我应该说“调用函数时不使用泛型”

不知道为什么要说“不使用泛型”。这正是typescript中使用泛型的原因。使用泛型并不难:

let strs:string[]=["aaa","bbb","ccc"];
let lastStr=last(strs);     // type of lastStr should be string

let dates:Date[]=[new Date];
let lastDate=last(dates);      // type of lastDate should be Date
最后一个函数(数组:T[]):T{
返回错误[anArray.length-1];
}
//用法
let strs:string[]=[“aaa”、“bbb”、“ccc”];
设lastStr=last(strs);//一串
让日期:日期[]=[新日期()];
设lastDate=last(日期)//日期

没有泛型就无法做到这一点。

不知道你为什么说“不诉诸泛型”。这正是typescript中使用泛型的原因。使用泛型并不难:

let strs:string[]=["aaa","bbb","ccc"];
let lastStr=last(strs);     // type of lastStr should be string

let dates:Date[]=[new Date];
let lastDate=last(dates);      // type of lastDate should be Date
最后一个函数(数组:T[]):T{
返回错误[anArray.length-1];
}
//用法
let strs:string[]=[“aaa”、“bbb”、“ccc”];
设lastStr=last(strs);//一串
让日期:日期[]=[新日期()];
设lastDate=last(日期)//日期

没有泛型就无法做到这一点。

您无法避免泛型,但您不必指定它们,因为它们可以自动推断。公认的答案可能足以满足您的需求,但还有另一种方法

TypeScript2.8将引入类型推断(其当前发布为夜间版本)。通过将条件类型与类型推断相结合,您可以支持任意类型的元组(固定大小N),而不是所有元素都是相同的类型

function last<T>(anArray:T[]) :T {
    return anArray[anArray.length-1];
}
// usage

let strs:string[]=["aaa","bbb","ccc"];
let lastStr=last(strs);     // string

let dates:Date[]=[new Date()];
let lastDate=last(dates); //date
类型元组=
[任何]|
[任何,任何]|
[任何,任何,任何]|
[任何,任何,任何,任何];
TupleLast型=
T扩展[推断L]?L:
T扩展[任何,推断L]?L:
T扩展[任何,任何,推断L]?L:
T扩展[任何,任何,任何,推断L]?L:有;
函数last(arg:T):TupleLast{
返回参数[arg.length-1];
}


把这个答案看作是一个可以做什么的脑力练习——我还在摆弄新玩具D

您无法避免泛型,但您不必指定它们,因为它们可以自动推断。公认的答案可能足以满足您的需求,但还有另一种方法

TypeScript2.8将引入类型推断(其当前发布为夜间版本)。通过将条件类型与类型推断相结合,您可以支持任意类型的元组(固定大小N),而不是所有元素都是相同的类型

function last<T>(anArray:T[]) :T {
    return anArray[anArray.length-1];
}
// usage

let strs:string[]=["aaa","bbb","ccc"];
let lastStr=last(strs);     // string

let dates:Date[]=[new Date()];
let lastDate=last(dates); //date
类型元组=
[任何]|
[任何,任何]|
[任何,任何,任何]|
[任何,任何,任何,任何];
TupleLast型=
T扩展[推断L]?L:
T扩展[任何,推断L]?L:
T扩展[任何,任何,推断L]?L:
T扩展[任何,任何,任何,推断L]?L:有;
函数last(arg:T):TupleLast{
返回参数[arg.length-1];
}


把这个答案看作是一个可以做什么的脑力练习——我还在摆弄新玩具没有泛型是不可能的。你为什么不想使用泛型呢?没有泛型是不可能的。你为什么不想用一个通用的呢?这与易用性无关。虽然我同意你的说法,但他想要的是一个没有泛型的解决方案(如果存在的话),而不是一个有泛型的解决方案。@Lansana在回答中添加了一行,明确指出没有泛型这是不可能的,我是在追求一些简单的代码,我觉得在调用这样一个简单的函数时必须指定类型有点多余,只是想知道是否可能…@Joan,但这就是泛型的美妙之处,TS推断,你不必指定类型。添加了Usageahh!我假设您在调用它时应该声明类型!。很抱歉“不诉诸泛型”的模糊性造成了一些误解,但你明白了问题的本质。谢谢这与易用性无关。虽然我同意你的说法,但他想要的是一个没有泛型的解决方案(如果存在的话),而不是一个有泛型的解决方案。@Lansana在回答中添加了一行,明确指出没有泛型这是不可能的,我是在追求一些简单的代码,我觉得在调用这样一个简单的函数时必须指定类型有点多余,只是想知道是否可能…@Joan,但这就是泛型的美妙之处,TS推断,你不必指定类型。添加了Usageahh!我假设您在调用它时应该声明类型!。很抱歉“不诉诸泛型”的模糊性造成了一些误解,但你明白了问题的本质。谢谢我只有两个星期的打字时间,我被它的美丽和我的思维能力淹没了,呃,我能赶上所有的可能性:-)(但我重复一遍,放松点,这只是时间问题)我只有两个星期的打字时间,我被它的美丽和我的思维能力淹没了,呃,我能赶上所有的可能性:-)(但我重复一遍,放松点,这只是时间问题)