我有这样的事情:
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`
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句