当前位置: 首页 > 知识库问答 >
问题:

typescript - 1. 如何在TypeScript中根据对象的结构动态决定属性的必填性?

楮自珍
2023-12-08
type A = {  b: {    c?: string;  };  a: {    c: string;  };};interface AddDisplayItem<T extends keyof A> {  data: A[T];}

我希望data是否必传由A[T]是否有必传属性决定。如何做呢?

共有1个答案

汪凌
2023-12-08
type A = {  b: {    c?: string;  };  a: {    c: string;  };};type AllOptional<T> = {  [K in keyof T]-?: {} extends Pick<T, K> ? never : K}[keyof T] extends never ? true : false;type AddDisplayItem<T extends keyof A> = AllOptional<A[T]> extends true  ? { data?: A[T] }  : { data: A[T] };const item1: AddDisplayItem<'a'> = { data: { c: 'Hello' } }; // 'data' is requiredconst item2: AddDisplayItem<'b'> = {}; // 'data' is optional
 类似资料: