我有一个TypeScript界面。问题是它有大约40个成员。当我使用它并且我只实现选择的成员时,我得到一个错误,有一些缺失。怎么忽略它?我必须全部实施吗?这个问题阻止我将一种类型转换为另一种类型。
E.g。
interface A {
// 40 members
}
class B implements A {
// only 5 members implemented
}
// somewhere in the code
var myVar1: A = something;
var myVar2: B = <B> myVar1; // here an error (can't convert because B has missing some properties and methods:/)
答案 0 :(得分:10)
在打字稿中,您可以将项目标记为可选项:
interface Person {
name: string;
address?: string;
}
名称是必需的,地址是可选的实施
答案 1 :(得分:5)
如果您承诺实现接口,则必须全部实现。
如果您只想处理B中的5个属性,一个解决方案是拥有一个实现40个属性的基类。
interface A {
propA: string;
propB: string;
}
class C implements A {
public propA = "";
public propB = "";
}
class B extends C {
public propB = "Example";
}
var myVar1: A;
var myVar2: B = <B> myVar1;
答案 2 :(得分:4)
界面中的40个项目非常多。
此外,如果某个类只需要5,则表示存在设计问题。
另一种设计是拥有多个相关接口,并将属性划分为更多逻辑组。
interface ICar ...
interface IRacingCar : ICar
interface IFlyingCar : ICar
interface IFamilyCar : ICar
然后你可以拥有一个实际实现多个接口的类。
class RaceCar: IRacingCar ...
class FlyingRaceCar: IRaceCar, IFlyingCar ...
class FlyingFamilyCar: IFlyingCar, IFamilyCar ...
此外,除非您确定对象实际上是该类,否则应避免从接口转换为特定类。如果您尝试使用该类的方法,如果该对象实际上不存在该类型,则会出现此问题。