众所周知,TS的类型属性是可以附加修复符的,比如
type Data = { readonly name: string }
代表 name 属性是只读的
type Data = { name?: string }
代表 name 属性是可选的
那么有什么办法能够移除这些修饰符呢? 答案是使用'-'修饰符来移除已有的修饰符。
type RequiredMutable<T> = {
-readonly [p in keyof T]-? : NonNullable<T[p]>;
}
interface Data {
readonly name: string;
readonly date?: Date;
readonly age: number | undefined;
readonly like: string | null;
}
type RequiredMutableData = RequiredMutable<Data>
// type RequiredMutableData = {
// name: string;
// date: Date;
// age: number;
// like: string;
// }