首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有属函数的问题

有属函数的问题
EN

Stack Overflow用户
提问于 2020-02-22 08:28:44
回答 2查看 63关注 0票数 0

我不知道为什么我有错误信息

teste.ts:41:18 - error TS2345:类型'T‘的参数不能分配给'number’类型的参数。

在以下代码中

代码语言:javascript
复制
function carre1<T>(x: T):T {
    x = Math.pow(x, 2);
    return x;
}
console.log(carre1<number>(0));
console.log(carre1<number>(2));
console.log(carre1<number>(5));
EN

Stack Overflow用户

回答已采纳

发布于 2020-02-24 04:03:17

我相信你是在探索仿制药及其用法。也许您刚才共享的功能对于泛型来说并不是一个很好的案例研究。Math.pow的第一个参数应该是数字类型的,这就是您要获得错误的原因。想象一下,如果您以这样的方式调用该函数:

代码语言:javascript
复制
console.log(carre1<string>("abc"));

这将导致运行时错误,这就是为什么TS转移溢出过程首先会阻止它的原因。

如果我们从功能的角度来看待这个函数,那么它根本不需要是泛型的。据了解,这已经是一个数字了。然后,该函数可以编写成如下所示,而不需要泛型:

代码语言:javascript
复制
function carre1(x: number): number {
    x = Math.pow(x, 2);
    .... some other logics?
    return result;
}

但是,如果我们坚持使用泛型参数,也许可以考虑以下几点。虽然泛型在这种情况下并不有用:

代码语言:javascript
复制
function carre1<T>(x: T ): T {
    let y:any = Math.pow(x as any, 2);
    return y;
}

请考虑以下功能。这可能是泛型的一个有用的例子,因为函数应该能够接受任何类型的参数。换句话说,函数逻辑与类型无关。

代码语言:javascript
复制
function deepCopy<T>(data: T): T {
    return JSON.parse(JSON.stringify(data));
}

泛型的另一个好用例可能是实现数据或对象Mapper。请参阅此处共享的示例https://stackoverflow.com/a/52759912/6096478

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60350351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档