5

我有一个 TypeScript 界面。问题是它有大约 40 名成员。当我使用它并且只实现选定的成员时,我会收到一个错误,指出有一些缺失。如何忽略它?我必须全部实施吗?这个问题使我无法将一种类型转换为另一种类型。

例如

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:/)
4

3 回答 3

10

在打字稿中,您可以将项目标记为可选:

interface Person {
    name: string;
    address?: string;
}

名称是必需的,地址是可选的,用于实施

于 2013-01-04T11:56:48.010 回答
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;
于 2013-01-04T11:55:05.737 回答
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 ...

此外,除非您确定对象实际上是该类,否则应避免从接口转换为特定类。如果您尝试使用该类的方法,但如果对象不是真正存在的类型,则会出现问题。

于 2014-02-02T16:25:48.150 回答