我有这样的东西:
const shiftObjValues = (obj: Object, shift: number): Object => { ... }
我有这样的界面:
interface Range {
start: number;
end: number;
}
现在,这是一个Object
,当将其传递到函数中时,我希望返回类型为Range
。
使用该功能时,我不想继续做as Range
,但希望它在能够容纳任何对象方面保持灵活性。
编辑:我本来希望没有泛型,但是不理解泛型可以以其他方式使用(如已接受的答案所示)
答案 0 :(得分:3)
是的,您想使用泛型(也称为type参数)保留传入的类型。您可以使用类型约束来确保它是一个对象。
const shiftObjValues = <T extends object>(obj: T, shift: number): T => { /* ... */ }
请注意,我使用object
而不是Object
,因为Object
几乎是JS中的所有内容,包括字符串和数字,我认为这不是您的意思。
还请注意,您不必显式传递type参数,这可以正常工作:
let range: Range = { start: 0, end: 1 };
let shifted = shiftObjValues(range, 1);
// `shifted` is inferred as type `Range`