Dmi*_*sky 3 properties typescript conditional-types
给定一个具有可选属性的对象类型,例如:
\ninterface Person {\n name: string;\n age: number;\n friends?: Person[];\n jobName?: string;\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 我想删除它的所有可选属性,以便结果是:
\ninterface Person {\n name: string;\n age: number;\n}\nRun Code Online (Sandbox Code Playgroud)\n我怎样才能做到这一点?
\n请注意,我无法使用,Omit<Person, "friends" | "jobName">因为事先不知道实际属性。我必须以某种方式收集所有可选属性的键的并集:
type OptionalKey<Obj extends object> = {\n [Key in keyof Obj]: /* ... */ ? Key : never;\n}[keyof Obj];\n\ntype PersonOptionalKey = OptionalKey<Person>;\n// "friends" | "jobName"\nRun Code Online (Sandbox Code Playgroud)\n另外,打字稿删除可选属性的命名很糟糕,并且不能回答我的问题。
\n虽然评论中提出的方法删除了可选属性,但它也删除了具有undefined其类型的可能值的非可选属性。
interface Person {
required: string;
optional?: string;
maybeUndefined: string | undefined
}
/*
type A = { required: string }
*/
type A = ExcludeOptionalProps<Person>
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找仅删除可选键的辅助类型,您可以将其编写为:
type RequiredFieldsOnly<T> = {
[K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3788 次 |
| 最近记录: |