首页 > 解决方案 > “-”是什么意思?TypeScript 映射类型中的语法含义?

问题描述

谁能解释一下那个“-”是什么?在以下 TypeScript 类型声明中,与仅使用“?”相比 那里?

type ValidationMap<T> = { [K in keyof T]-?: Validator<T[K]> }

标签: typescript

解决方案


它不是通配符。该-?符号是在 TypeScript 2.8 中添加的,作为从映射类型中删除可选修饰符的一种方式。

基本上,这意味着它ValidationMap<T>具有与 相同的键T,但没有一个属性ValidationMap<T>是可选的,即使相应的属性T是。例如:

type Example = ValidationMap<{a: string, b?: number | undefined}>;
// type Example = {a: Validator<string>, b: Validator<number | undefined>}

在这里,即使它映射的类型具有可选属性,它也Example具有必需的属性。 bb

(请注意,如果您更改-?为 just?或 to +?,则相反...您将添加可选修饰符。该?符号是在 TypeScript 2.1 中作为映射类型功能的一部分添加的,而该+?符号是在 TypeScript 2.8 中引入的与-?。)

希望有帮助。祝你好运!


推荐阅读