Typescript 键值对,其中键是自定义类型

斯蒂芬882

我有以下键值对,它被用于过滤系统。当我们应用过滤器时,我们可以将它与所有当前过滤器合并,或者只是通过重置以前的过滤器来应用它。

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: Argument of type '{ [x: string]: string; }' is not assignable to parameter of type 'Filter'.   Type '{ [x: string]: string; }' is missing the following properties from type 'Filter': mine, bookmarked, textQuery, type

我想应用一个过滤器,它的键可能是其中一种PossibleFilterKeys类型,但它会抛出上面的错误。

为什么会发生这种情况?

31piy

问题在于这个声明:

type Filter = {
    [key in PossibleFilterKeys]: string;
};

以上声明Filter必须包含PossibleFilterKeys. 您可以通过以下语法将它们设为可选:

type Filter = {
    [key in PossibleFilterKeys]?: string; // <-- Place a question mark
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typescript自定义类型定义在导入类上中断

自定义模块模式的TypeScript类型定义

自定义TypeScript类型定义文件将被忽略

在Typescript中键入自定义的react-redux connect函数

Typescript如何在对象中键入自定义键

在 TypeScript 中将函数签名设置为自定义类型

TypeScript - 使用泛型创建自定义类型

TypeScript 可以通过事件识别自定义类型吗?

如何在TypeScript中迭代自定义文字类型?

TypeScript 2:无类型npm模块的自定义键入

检查变量是否属于Typescript中的自定义类型

Typescript和Express Validator自定义验证类型

自定义类型的键值对

如何在Typescript中定义自定义类型以防止“无法分配给类型...”

即使类型正确,TypeScript 自定义类型保护也会返回 false

如何在TypeScript中使用预定义的可接受值正确声明自定义类型?

TypeScript:如何为已安装的npm包定义自定义类型?

TypeScript没有在tsconfig中获取我的自定义类型定义

在 TypeScript 中定义自定义类型时出现意外标识符

TypeScript中的自定义错误类

TypeScript中的自定义装饰器

TypeScript 2.1自定义元素

React Typescript - 添加自定义属性

使用 TypeScript 自定义确认框

SonarQube 中的自定义 TypeScript 规则

TypeScript 中的自定义对象转换

用于字符串长度的 TypeScript 自定义类型检查

TypeScript React Hooks,自定义钩子类型推断问题

TypeScript-检查给定的“ any”参数是否为自定义类型?