有時候需要一個類型,是依賴於上一個類型但是,對屬性的要求去不同 interface Person{ name: string; agent: number; } type Person2 = Readonly<Person>; type Person3 = Partial<Person>; class Test { run() { let person: Person = { name: 'dd', agent: 1 }; person.name = 'cc'; let person2: Person2 = { name: 'read', agent: 1 }; // person2.agent = 3; 報錯 let person3: Person3 = { name: 'person 3' // 屬性不完整也不會報錯 } } } ReadOnly、Partial源碼 type Readonly<T> = { readonly [P in keyof T]: T[P]; } type Partial<T> = { [P in keyof T]?: T[P]; } 用 in, keyof即可實現 type Pick<T, K extends keyof T> = { [P in K]: T[P]; } type Record<K extends string, T> = { [P in K]: T; }