javascript - TypeScript:如何让返回类型成为参数的类型?
问题描述
我有这样的事情:
const shiftObjValues = (obj: Object, shift: number): Object => { ... }
我有一个这样的界面:
interface Range {
start: number;
end: number;
}
现在,这是一个Object
,当它被传递给函数时,我希望返回类型为Range
。
我不想as Range
在使用该功能时继续这样做,但我希望它保持灵活,能够接受任何对象。
编辑:我最初想要这个没有泛型,但不明白泛型可以以不同的方式使用(如接受的答案所示)
解决方案
是的,您想使用泛型(又名类型参数)来保留传入类型。您可以使用类型约束来确保它是一个对象。
const shiftObjValues = <T extends object>(obj: T, shift: number): T => { /* ... */ }
请注意,我使用object
not Object
,就像Object
JS 中的几乎所有内容一样,包括字符串和数字,我认为这不是您的意思。
另请注意,您不必显式传递类型参数,这意味着这可以正常工作:
let range: Range = { start: 0, end: 1 };
let shifted = shiftObjValues(range, 1);
// `shifted` is inferred as type `Range`
推荐阅读
- php - Codeigniter 使用 php5.6 和 7.2 显示空白页面
- python - 使用使用 Ip 过滤的 Pymongo 远程访问 MongoDB [需要 openvpn - cyberoam 唯一 IP]
- delphi - 释放在同一应用程序中启动时创建的互斥锁
- python - 使用 Tkinter 在 Python 中拼接图像
- java - 带星号的 For 循环
- java - Java 声音不播放
- javascript - 将对象值与数组进行比较?
- python - if 和 elif 语句不起作用/不被 python 识别
- angular - 如何在角度 8 中从有效负载中访问单独的字段
- php - 在 PHP 中根据天数生成调度程序日历