Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeScript:如何使返回类型成为参数的类型?_Javascript_Typescript_Generics - Fatal编程技术网

Javascript TypeScript:如何使返回类型成为参数的类型?

Javascript TypeScript:如何使返回类型成为参数的类型?,javascript,typescript,generics,Javascript,Typescript,Generics,我有这样的想法: const shiftObjValues = (obj: Object, shift: number): Object => { ... } 我有这样一个界面: interface Range { start: number; end: number; } 现在,这是一个对象,当它被传递到函数中时,我希望返回类型为范围 我不想在使用该功能时继续执行as Range,但我希望它能够灵活地接收任何对象 编辑:我原本希望不使用泛型,但不理解泛型以不同的方式可用(如接

我有这样的想法:

const shiftObjValues = (obj: Object, shift: number): Object => { ... }
我有这样一个界面:

interface Range {
  start: number;
  end: number;
}
现在,这是一个
对象
,当它被传递到函数中时,我希望返回类型为
范围

我不想在使用该功能时继续执行
as Range
,但我希望它能够灵活地接收任何对象


编辑:我原本希望不使用泛型,但不理解泛型以不同的方式可用(如接受的答案所示)

是的,您希望使用泛型(aka type参数)来保留传入的类型。可以使用类型约束来确保它是对象

const shiftObjValues = <T extends object>(obj: T, shift: number): T => { /* ... */ }

const shiftObjValues=(obj:Object,shift:number):Range=>{return myVar as Range}
我以
Range
为例。但是,如果它们传入一个
三角形
,例如,它将返回一个
三角形
,您不想使用泛型有什么特别的原因吗?在主题之外,您应该使用
对象
,而不是像reselect make这样的
对象
库。这是一个更糟糕的解决方案,问题是不使用泛型。为什么我不知道,因为这应该是答案,但问题排除了它。谢谢。出于某种原因,我对泛型实现将如何进行感到困惑。
let range: Range = { start: 0, end: 1 };
let shifted = shiftObjValues(range, 1);
// `shifted` is inferred as type `Range`