简体   繁体   English

Typescript - 如果没有提供泛型,则为可选类型

[英]Typescript - optional type if generic is not provided

I Would like optionalFields to have type of OptionalFieldsByTopic<Topic> if generic is not provided, otherwise OptionalFieldsByTopic<T> .如果未提供泛型,我希望optionalFields具有OptionalFieldsByTopic<Topic>类型,否则OptionalFieldsByTopic<T> Thanks for help in advance.提前感谢您的帮助。

export interface ICreateItem<T extends Topic = never> { // T must be optional
   id: string;
   name: string;
   tags: string[];
   collectionId?: string;
   topic: string;
   optionalFields?: OptionalFieldsByTopic<T>; // If T is not provided then this is equal OptionalFieldsByTopic<Topic>
}

type OptionalFieldsByTopic<T extends keyof IOptionalFields> = IOptionalFields[T];

OptionalFIeldsByTopic example: OptionalFIeldsByTopic 示例:

const test: OptionalFieldsByTopic<"books"> = { author: "brandon", language: "english" }

export type Topic = keyof IOptionalFields;

mockup data:样机数据:


export interface IOptionalFields {
   books: {
      author?: string;
      language?: string;
      translation?: string; 
   };
   vehicle: {
      model?: string;
      type?: string;
      color?: string;
 
   };
   painting: {
      author?: string;
      description?: string;
      image?: string;
   };
}


This should work:这应该有效:

export interface ICreateItem<T extends Topic = Topic> {
...
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM