簡體   English   中英

是否可以基於對象定義類型?

[英]Is it possible to define types based on an object?

我想知道是否可以采用對象文字並從中派生類型。 IE。

const inputs = [
  {
    name: "announcements",
    type: "list",
    subFields: [
      {
        name: "copy",
        type: "string",
        defaultValue: "",
      },
      {
        name: "buttonLabel",
        type: "string",
        defaultValue: "",
      },
      {
        name: "buttonUrl",
        type: "url",
        defaultValue: "",
      },
    ],
  },
]

我可以讓它自動推斷為:

interface Announcements {
  copy: string;
  buttonLabel: string;
  buttonUrl: string;
}
type AnnouncementList = Announcements[];

這會很好,因為我的定義需要以特定的方式定義,而不是重新定義它們(並且可能會犯錯誤),如果推斷出來會容易得多。

TypeScript 中的類型操作確實允許我們基於其他類型創建類型,例如您在問題中顯示的類型。 由於Announcements的鍵是對象中的字符串字面量,我們需要使用as const來保留縮小的字符串字面量類型。

const inputs = [
  {
    name: "announcements",
    type: "list",
    subFields: [
      {
        name: "copy",
        type: "string",
        defaultValue: "",
      },
      {
        name: "buttonLabel",
        type: "string",
        defaultValue: "",
      },
      {
        name: "buttonUrl",
        type: "url",
        defaultValue: "",
      },
    ],
  },
] as const

現在我們可以根據inputs的類型構建一個新類型。

type Announcements = {
  [K in typeof inputs[0]["subFields"][number]["name"]]: string
}

// type Announcements = {
//     copy: string;
//     buttonLabel: string;
//     buttonUrl: string;
// }

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM