從無類型語言JavaScript到類型化TypeScript,您開始使用接口。關於如何構建一個應用程序轉成暴力討論,我的隊友:)我們正在建設有時簡單的問題作出反應+終極版+打字稿應用程序,我們有兩個「東西」:爲用戶(終極版店內用戶代表)應用程序狀態和用戶(描述JSON API響應)的API響應,它們都具有接口,到目前爲止,接口是相同的,但是這可能會改變。映射是使用一些自定義的函數來完成:兩個單獨的接口或一個擴展另一個接口:幹或不烘乾
const mapUserApiToState = (user: IUserAPI): IUserState => { ... }
因爲它是一個早期的階段,會有很多的接口,寫有兩個或三個路徑,我們可以採取:
(1)獨立每個接口分別放入自己的文件。但是你必須爲違反DRY原則的每個接口重複相同的屬性。
// file1.ts
interface IUserState {
id: number;
name: string;
kids: number;
}
// file2.ts
interface IUserAPI {
id: number;
name: string;
kids: number;
}
(2)僅有延伸與另一一個接口。這樣,你就不需要再重複自己,但是這將意味着一個接口擴展另一個,而實際上他們看起來是一樣的,但對完全不同的目的
// file1.ts
interface IUserState {
id: number;
name: string;
kids: number;
}
// file2.ts
interface IUserAPI extends IUser {}
(3)創建一些抽象的第三界面。但是,這將創建一個多個文件與界面,不應使用(在那裏你會使用IUSER?)
// file1.ts
interface IUser {
id: number;
name: string;
kids: number;
}
// file2.ts
interface IUserState extends IUser {}
// file3.ts
interface IUserAPI extends IUser {}
(4)退出縮腰的時間上瑣碎的事情。 YAGNI。
幾個問題我會問自己,在這種情況下:有兩個接口** **可能發散?如果應用程序不同步,應用程序是否會崩潰?你可以合併它們而不是將它們更多地抽象出來,以便擁有1個接口而不是2個或3個接口? – alebianco
@mseimys在第三種情況下,你爲什麼會說'IUser'不會被使用?該接口已經是其他接口「IUserState」和「IUserAPI」的一部分。你不會用它來保存這兩個派生接口的結構信息嗎?我的意思是,只要有共同的改變,你就會修改那個界面,對吧? – Leone
@Leone是的,我會在這個'IUser'接口持有共同的屬性,但我認爲 這是不明智的任何地方使用它,在這種情況下,其他兩個是擺在首位完全無用 ,所以我的問題:)好我的例子可能看起來微不足道,但 想象有幾十複雜的屬性, 像'點:[{ISVISIBLE:真,標題: 「標題」,標籤:[1,2,3]}]' – mseimys