TypeScript:如何将返回类型作为参数的类型?

时间:2019-03-21 20:56:28

标签: javascript typescript generics

我有这样的东西:

const shiftObjValues = (obj: Object, shift: number): Object => { ... }

我有这样的界面:

interface Range {
  start: number;
  end: number;
}

现在,这是一个Object,当将其传递到函数中时,我希望返回类型为Range

使用该功能时,我不想继续做as Range,但希望它在能够容纳任何对象方面保持灵活性。

编辑:我本来希望没有泛型,但是不理解泛型可以以其他方式使用(如已接受的答案所示)

1 个答案:

答案 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`