-?
修饰符的作用是从一个联合类型中去除属性的可选性。当一个属性原本是可选的(即可以省略),使用 -?
后,该属性就变成了必需的(必须被指定)。
去掉问号,变成必选属性
type Required<T> = { [P in keyof T]-?: T[P] };
+?
修饰符的作用正好与 -?
相反,它将属性标记为可选的。如果属性原本就是可选的,那么 +?
不会产生任何影响;但如果属性是必需的,那么 +?
将其变为可选的。
加上问号,变成可选属性
type Partial<T> = { [P in keyof T]+?: T[P] };