带有接口属性的打字稿限制函数属性对象键

时间:2020-09-30 05:16:39

标签: javascript typescript types

我有一个打字稿界面,我想将函数参数对象限制为仅具有App接口的属性,因为我尝试使用Record和普通{}(对象)类型,但没有用。

interface App {
  a:'a',
  b: 2,
  c?:'c'
};

这是我的界面外观。

function func(filter: Record<keyof App ,unknown>){

};

func({a:'a'});

这是我尝试使用Record的方式,但这给了我错误:

'{a:string;类型的参数}'不能分配给'Record <“ a”类型的参数| “ b” | “ c”,未知>'。 输入'{a:string; }'缺少类型'Record <“ a”的以下属性| “ b” | “ c”,未知>':b,c(2345

function func(filter: {[K in keyof App]: unknown}){    
}
    
func({a:'a'});

这给了我

'{a:string;类型的参数}'不可分配给类型'{a的参数;未知; b:未知; c ?:未知; }'。 类型'{a:string;类型中缺少属性'b'。 }”,但类型为“ {a:未知; b:未知; c ?:未知; }'

这是可以理解的,因为in运算符希望传递所有键,但是我如何创建一种类型,可以限制filter对象键为接口App的属性,但不必这样做我需要发送所有属性。如果可以的话,是否有可能在打字稿中实现这样的目标?

0 个答案:

没有答案