我在type definitions for prop-types
中碰到了这一行:
export type ValidationMap<T> = { [K in keyof T]-?: Validator<T[K]> };
如果没有-
,这将是相当标准的部分mapped type,但我在文档中找不到任何涉及-?
的地方。
任何人都可以解释-?
的含义吗?
答案 0 :(得分:13)
+
或-
允许控制映射的类型修饰符(?
或readonly
)。 -?
表示必须全部存在,也可以删除可选性(?
),例如:
type T = {
a: string
b?: string
}
// Note b is optional
const sameAsT: { [K in keyof T]: string } = {
a: 'asdf', // a is required
}
// Note a became optional
const canBeNotPresent: { [K in keyof T]?: string } = {
}
// Note b became required
const mustBePreset: { [K in keyof T]-?: string } = {
a: 'asdf',
b: 'asdf' // b became required
}