什么是" - ?" TypeScript映射类型中的语法含义?

Nat*_*sha 4 typescript

任何人都可以解释一下" - ?" 在下面的TypeScript类型声明意味着,与仅使用"?"相比 那里?

type ValidationMap<T> = { [K in keyof T]-?: Validator<T[K]> }
Run Code Online (Sandbox Code Playgroud)

jca*_*alz 5

这不是通配符.的-?表示法是在打字稿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>}
Run Code Online (Sandbox Code Playgroud)

这里Example有一个必需的b属性,即使它映射的类型有一个可选b属性.

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

希望有所帮助.祝好运!