typescript手册目前没有关于箭头函数的内容。正常的功能 可以使用以下语法进行泛型: 例子:
function identity<T>(arg: T): T {
return arg;
}
箭头函数的语法是什么?
typescript手册目前没有关于箭头函数的内容。正常的功能 可以使用以下语法进行泛型: 例子:
function identity<T>(arg: T): T {
return arg;
}
箭头函数的语法是什么?
当前回答
这么晚了,但与ES6不需要扩展它仍然为我工作....:)
let getArray = <T>(items: T[]): T[] => {
return new Array<T>().concat(items)
}
let myNumArr = getArray<number>([100, 200, 300]);
let myStrArr = getArray<string>(["Hello", "World"]);
myNumArr.push(1)
console.log(myNumArr)
其他回答
这里我有2个带泛型的箭头函数:
直接呼叫:
const foo = <T>(value: T): void => {
console.log(value);
foo('hello') // hello
}
创建一个稍后使用的类型:
type TFoo<S> = (value: S) => boolean;
const foo: TFoo<number> = (value) => value>0;
console.log(foo(1)) // true
console.log(foo(-1)) // false
希望这对你有所帮助!
我喜欢使用这种类型的声明:
const identity: { <T>(arg: T): T } = (arg) => arg;
它允许在需要时为函数定义额外的道具,在某些情况下,它有助于使函数体相对于泛型定义更清晰。
如果你不需要额外的道具(命名空间之类的东西),它可以简化为:
const identity: <T>(arg: T) => T = (arg) => arg;
这么晚了,但与ES6不需要扩展它仍然为我工作....:)
let getArray = <T>(items: T[]): T[] => {
return new Array<T>().concat(items)
}
let myNumArr = getArray<number>([100, 200, 300]);
let myStrArr = getArray<string>(["Hello", "World"]);
myNumArr.push(1)
console.log(myNumArr)
Edit
根据@Thomas的评论,在更新的TS编译器中,我们可以简单地做:
const foo = <T,>(x: T) => x;
原来的答案
完整的例子解释了Robin引用的语法…带回家给我:
通用函数
像下面这样的东西是可以的:
function foo<T>(x: T): T { return x; }
然而,使用箭头泛型函数将不会:
const foo = <T>(x: T) => x; // ERROR : unclosed `T` tag
解决方法:在泛型参数上使用扩展来提示编译器 它是通用的,例如:
const foo = <T extends unknown>(x: T) => x;
虽然使用extends{}的流行答案是有效的,而且比扩展任何答案都好,但它迫使T成为一个对象
const foo = <T extends {}>(x: T) => x;
为了避免这种情况并保持类型安全,可以使用extends unknown代替
const foo = <T extends unknown>(x: T) => x;