簡體   English   中英

如何在typescript中定義接口類型?

[英]How to define type of interface in typescript?

我想寫一個 function 來修改具有特定界面的表單的值。 然后我收到錯誤消息,指出字符串不是表單界面鍵的一部分。 如何為 function 定義類型? 為什么我不能將接口用作類型?

沙箱

interface IForm {
   age: number
   name: string
   job: string
}

// ts 錯誤:無法將字符串分配給“age” | “名字” | “工作”

const setCustom = value => setValue(value, "")

//沒有ts錯誤

const setCustom: (value: "age" | "name" | "job") => void = value => setValue(value, "")

看來您正在尋找keyof類型運算符,它采用 object 類型,如IForm並生成其鍵的聯合:

type KeyofIform = keyof IForm;
// type KeyofIform = "age" | "name" | "job"

因此,您在任何地方手動指定"age" | "name" | "job" "age" | "name" | "job" "age" | "name" | "job"你可以改用keyof IForm ,它是等價的,如果IForm的定義改變,它會自動改變:

const setCustom: (value: keyof IForm) => void = value => setValue(value, "")
// const setCustom: (value: keyof IForm) => void

setCustom("age"); // okay
setCustom("name"); // okay
setCustom("job"); // okay
setCustom("shoeSize"); // error!
// Argument of type '"shoeSize"' is not assignable 
// to parameter of type '"age" | "name" | "job"'

游樂場代碼鏈接

你需要放; 在每個變量的末尾:

interface IForm {
   age?: number;
   name?: string;
   job?: string;
}

暫無
暫無

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

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