Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Typescript 类型脚本超级类型_Typescript - Fatal编程技术网

Typescript 类型脚本超级类型

Typescript 类型脚本超级类型,typescript,Typescript,我正在寻找一种类型,这是一个超级类型的T? 比如: foo<T>(obj: Super<T>): T foo(obj:Super):T 假设T是一个属性为{username,password} 超级,属性为{username,password,confirmPassword} 函数签名的示例: function excludeKeys<T>(obj: Super<T>, excludeKeys: string[]): T { // E

我正在寻找一种类型,这是一个超级类型的T? 比如:

foo<T>(obj: Super<T>): T
foo(obj:Super):T
假设T是一个属性为{username,password}
超级,属性为{username,password,confirmPassword}

函数签名的示例:

function excludeKeys<T>(obj: Super<T>, excludeKeys: string[]): T {

    // Exclude key/pairs form original object ...
}
函数excludeKeys(obj:Super,excludeKeys:string[]):T{
//从原始对象中排除键/对。。。
}

您必须使用
T extends U
指定父级,以便TypeScript可以推断父级类型:

function foo<T extends U, U>(obj: U): T { ... }
函数foo(obj:U):T{…} 或者你可以试试这样:

type Super<T> = T extends infer U ? U : object;

function foo<T>(obj: Super<T>): T { ... }
type Super=T扩展推断U?U:对象;
函数foo(obj:Super):T{…}

好的,谢谢你的回答,有没有不涉及你的解决方案?@Dachstein,欢迎你。我试过
type Super=T扩展推断U?U:object
但TypeScript似乎没有推断父类型,只是返回
T
。因此,我不知道任何其他解决方案会在不涉及
U
的情况下起作用。我只是尝试了您的类型
Super=t扩展推断U?U:对象
,它在我这边起作用。这就是我一直在寻找的解决方案。但是你说TypeScript似乎不能推断父类型,简单返回T?我已经用上面的例子进行了测试。有两个对象,其中父对象正好还有一个键/值对。@Dachstein,哦,好的!然后我会在答案中添加它,我一定是在测试它时出错了。。。