在 TypeScript 中创建模型类

新手上路,请多包涵

嗨,我是 TypeScript 的新手,我来自 C# 和 JavaScript 背景。我正在尝试创建一种方法,允许我创建类似于我们在 C# 中可以做的类模型。

这是我尝试过的:

 export class DonutChartModel {
    dimension: number;
    innerRadius: number;
    backgroundClass: string;
    backgroundOpacity: number;
}

我希望这会生成一个 JavaScript 模型来公开声明的属性,但这只会生成一个没有声明属性的函数 DonutChartModel

查看文档后,我注意到为了公开属性,我必须添加一个构造函数并从那里初始化属性。虽然这可能有效,但它无助于每个模型可能有 20 个或更多属性的情况,因为在我看来,初始化可能看起来很笨拙,而且它还会降低可读性。

我希望有一种方法可以在不传递构造函数参数的情况下做这样的事情:

 var model = new DonutChartModel();
model.dimension = 5
model.innerRadius = 20
....

TypeScript 中是否有任何选项可以执行此操作?

原文由 aleczandru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 687
2 个回答

您似乎试图完成的是在模型上强制执行结构。虽然在 C# 中使用类来实现这一点很有意义,但在 TypeScript 中,最好的方法是创建 typeinterface

以下是两者的示例(为简洁起见减少了属性)

类型

type DonutChartModel = {
    dimension: number;
    innerRadius: number;
};
var donut: DonutChartModel = {
    dimension: 1,
    innerRadius: 2
};

界面

interface IDonutChartModel {
    dimension: number;
    innerRadius: number;
}
var donut: IDonutChartModel = {
    dimension: 1,
    innerRadius: 2
};

何时使用:

接口可以从类/类扩展,最适合定义属性时使用。

类型可以组合,并且应该更多地用于非复合属性。一个很好的例子是使用类型来做这样的事情:

 type Direction = 'up' | 'down' | 'left' | 'right';

可以在 这里 找到关于类型的优秀资源,或者作为 TypeScript 的答案:接口与类型

原文由 Brocco 发布,翻译遵循 CC BY-SA 4.0 许可协议

为字段提供默认值应该可以满足您的需求。

 export class DonutChartModel {
    dimension: number = 0;
    innerRadius: number = 0;
    backgroundClass: string = "";
    backgroundOpacity: number = 0;
}

原文由 Joe Clay 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进