Typescript键值对,其中键为自定义类型
我有下面的键值对,它被用于过滤系统。当我们应用一个过滤器时,我们可以将它与当前的所有过滤器合并,或者只是通过重置前一个过滤器来应用它Typescript键值对,其中键为自定义类型,typescript,Typescript,我有下面的键值对,它被用于过滤系统。当我们应用一个过滤器时,我们可以将它与当前的所有过滤器合并,或者只是通过重置前一个过滤器来应用它 type MINE = "mine" type BOOKMARKED = "bookmarked" type TEXT_QUERY = "textQuery" type JobType = "type" export type PossibleFilterKeys = MINE |
type MINE = "mine"
type BOOKMARKED = "bookmarked"
type TEXT_QUERY = "textQuery"
type JobType = "type"
export type PossibleFilterKeys = MINE | BOOKMARKED | TEXT_QUERY | JobType
type Filter = {
[key in PossibleFilterKeys]: string;
};
然后我有一个函数的原型:
const apply = (filter: Filter) => void
当我们使用它时:
// name: PossibleFilterKeys,
// value: string,
apply({[name]: value})
它触发:TS2345:类型为“{[x:string]:string;}”的参数不能分配给类型为“Filter”的参数。类型“{[x:string]:string;}”缺少类型“Filter”中的以下属性:mine、bookmarked、textQuery、Type
我想应用一个过滤器,它的键可以是PossibleFilterKeys
类型之一,但它会抛出上面的错误
为什么会发生这种情况?问题在于这句话:
type Filter = {
[key in PossibleFilterKeys]: string;
};
上面声明Filter
必须包含可能的filterKeys
的所有键。您可以通过以下语法将这些设置为可选:
type Filter = {
[key in PossibleFilterKeys]?: string; // <-- Place a question mark
};
类型过滤器={
[key in PossibleFilterKeys]?:string;//请分享可复制的示例感谢@31piy解决了这个问题。正如他所说,我们可以做:[key in PossibleFilterKeys]?:string
但是我们也可以使用Partial实用工具:应用:(filter:Partial)=>void
是的,谢谢!另一种方法是:应用:(filter:Partial)=>void
@Stephan882--我认为这不是一个好的选择。你的方法只解决了一个部分,即用一个部分对象调用函数。创建过滤器
对象怎么样?这些仍然需要所有键。好吧,你是对的。目前我没有创建任何东西。我们调用函数,传递一个对象,然后合并或替换现在的。再次感谢你,我真的很感谢你的帮助!