我正在学习类和接口。我有一个让我烦恼的事情,这是我第一次处理这类事情,所以请在这里忍受。
假设我有此界面:
// IFoo.d.ts export default interface IFoo { foo: string; bar: number; }
当我在一个类中实现它时,我将执行以下操作:
// FooModel.ts import IFoo from './IFoo'; export default class FooModel implements IFoo { foo: string; bar: number; constructor({ foo, bar }: IFoo = { foo: 'hello', bar: 1 }) { this.foo = foo; } }
为什么我必须重新实现相同的属性?
这基本上与复制粘贴相同,但有严格的约定。另外,我必须分别键入foo
和bar
6次,才能根据接口正确地为其分配默认的可选
也有一种更有效的方法吗?
编辑;我正在尝试实现以下目标:
具有属性的类,可以从中使用属性进行打字稿的检查,如下所示:界面
export default interface FooDTO { foo: string; bar: number; }
模型
export interface IFoo { foo: string; bar: number; } export default class FooModel implements IFoo { foo: string; bar: number; constructor({ foo, bar }: IFoo = { foo: 'hello', bar: 1 }) { this.foo = foo; } }
控制器
export default class FooController {
public static async readAll(): Array<FooDTO> {
// some model stuff which maps query to dto
return Array<FooDTO>result;
}
}
我正在学习类和接口。而且我有一个让我烦恼的事情,这是我第一次处理这类事情,所以请在这里忍受。假设我得到了这个接口:// ...
您可以使用abstract class
代替接口。与接口具有相同的好处,但是可以扩展它:
如果定义仅具有属性的接口,则基本上定义了一种数据结构类型,然后可以使用该数据结构类型来键入对象。
我认为“为什么我必须再次重新实现相同的属性”的规范答案在(越来越过时的TypeScript spec中:]]
请注意,因为TypeScript具有结构化类型系统,所以一个类无需明确声明其实现了一个接口—该类仅包含适当的实例成员集就足够了。类的
implements
子句提供一种机制来断言和验证该类包含适当的实例成员集,但是,它对类类型没有影响