繁体   English   中英

如何定义通用类型:类型为属性名称 typescript

[英]How can I define Generic type : type as property name typescript

如果T等于trigger数据属性仅显示trigger ,我如何定义通用类型GetAppActions ,反之亦然

type GetAppActionType = 'trigger' | 'action'
interface AppActionInputField {}

type GetAppActions<T = GetAppActionType> = {
    data: {
        action: { inputFields: AppActionInputField[] }
        trigger: { inputFields: AppActionInputField[] }
    }
    type: T
}

您可以使用映射类型

interface AppActionInputField {}

type GetAppActions<T extends "trigger"|"action"> = {
    data: {
        [K in T]: { inputFields: AppActionInputField[] }
    },
    type: T
}

const test: GetAppActions<"trigger"> = {
    data: {
        trigger: { inputFields: [{}] }
    },
    type: "trigger"
}

游乐场链接

您可以使用区分联合来帮助您根据type限制data属性。

基本上,这充当您的类型的switch


interface AppActionInputField { }

type GetAppActions = {
  type: "trigger"
  data: {
    trigger: { inputFields: AppActionInputField[] }
  }
} | {
  type: "action",
  data: {
    action: { inputFields: AppActionInputField[] }
  }
}

type GetAppActionType = GetAppActions["type"];
// "actions" | "trigger"

暂无
暂无

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

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