Typescript 类型脚本超级类型
我正在寻找一种类型,这是一个超级类型的T? 比如: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
foo<T>(obj: Super<T>): T
foo(obj:Super):T
假设T是一个属性为{username,password}超级
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,哦,好的!然后我会在答案中添加它,我一定是在测试它时出错了。。。