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--我认为这不是一个好的选择。你的方法只解决了一个部分,即用一个部分对象调用函数。创建
过滤器
对象怎么样?这些仍然需要所有键。好吧,你是对的。目前我没有创建任何东西。我们调用函数,传递一个对象,然后合并或替换现在的。再次感谢你,我真的很感谢你的帮助!