从无类型语言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