[英]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.