删除属性的修饰符

众所周知,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;
// }

在线试一试