假設我在 TypeScript 中有一些介面:
export interface IStateA {
id: number;
}
export interface IStateB {
text: string;
moreText: string;
}
有沒有辦法無需手動生成以下介面?
export interface IStateASetters {
setId: (number) => void;
}
export interface IStateBSetters {
setText: (string) => void;
setMoreText: (string) => void;
}
請注意以下事項:
- 新介面名稱與舊介面名稱相同,只是
Setters附加了 - 新介面具有接受舊介面相應屬性型別的方法
- 新的介面方法名稱與舊的屬性名稱相同,除了
set前置和舊名稱的第一個字母大寫。
如果這是不可能的,完全可以理解,非常歡迎部分答案!
uj5u.com熱心網友回復:
如果將映射型別與字串文字和鍵重命名相結合,則可以執行此操作。
像這樣:
type WithSetters<T> = {
[K in keyof T & string as `set${Capitalize<K>}`]:
(newValue: T[K]) => void
}
這里一個棘手的部分是& string. 這是必要的,因為型別可能具有非字串鍵(數字或符號)。但是這種轉換只對字串鍵有意義。因此,通過將鍵與string您相交,您可以確保只映射string鍵。
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/317141.html
標籤:打字稿
上一篇:如何擴展子界面元素?
