gpt4 book ai didi

javascript - 通用类型(T)与 typescript 中的任何类型之间有什么区别

转载 作者:IT王子 更新时间:2023-10-29 03:19:10 24 4
gpt4 key购买 nike

typescript 中的 generic Type(T)any 有什么区别?

功能一

function identity(arg: any): any {
return arg;
}

功能2

function identity<T>(arg: T): T {
return arg;
}

功能3

function identity<T>(arg: T[]): T[] {
return arg;
}

Function 1 & 3 is accepted if we passing any kind of data type, But the function 2 does not accept if we pass an array. generic type is accepting all kind of data type on compile time. but here why it does not accept?

还有哪个函数有利于获得更好的性能(函数 1 或函数 3)?

最佳答案

如果这是仅返回一个参数且不受类型限制使用的恒等函数,则没有区别:

const foo: any = fn(['whatever']);

输入的代码有区别:

const foo: string = fn('ok');
const bar: string = fn([{ not: 'ok' }]);

此外,泛型的使用提供了语义。此签名表明该函数是未类型化的并返回任何内容:

function fn(arg: any): any { ... }

此签名表明该函数返回与其参数相同的类型:

function fn<T>(arg: T): T { ... }

实际函数通常比return arg 示例更有意义。通用类型可以受益于类型限制(而 any 显然不能):

function fn<T>(arg: T[]): T[] {
return arg.map((v, i) => arg[i - 1]);
}

但是当该函数与其他泛型类和泛型函数结合使用时(如果涉及非泛型则消除),好处会变得更加明显:

function fn<T>(arg: T[]): T[] {
return Array.from(new Set<T>(arg));
}

这允许在输入(参数)和输出(返回值)之间始终保持 T 类型:

const foo: string[] = fn(['ok']);
const bar: string[] = fn([{ not: 'ok' }]);

性能上不会有任何差异,因为 TypeScript 类型只存在于设计时。

关于javascript - 通用类型(T)与 typescript 中的任何类型之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com