嗨,我是TypeScript新手,我来自C#和JavaScript背景.我试图创建一种方法,使我能够创建类似于C#的类模型.

以下是我try 过的:

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中是否有任何选项可以执行此操作?

推荐答案

看起来您试图实现的是在模型上强制执行 struct .虽然在C#中使用类来实现这一点是有意义的,但在类型Script中,最好的方法是创建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';

关于类型的优秀资源可以在here类型Script: 界面s vs 类型s中找到.

Typescript相关问答推荐

使用新控制流的FormArray内部的Angular FormGroup

ReturnType此索引方法与点表示法之间的差异

为什么在TypScript中写入typeof someArray[number]有效?

对于使用另一个对象键和值类型的对象使用TS Generics

为什么typescript要把这个空合并转换成三元?

如何将类型从变量参数转换为返回中的不同形状?

将对象属性转换为InstanceType或原样的强类型方法

如何使用函数填充对象?

未在DIST中正确编译TypeScrip src模块导入

Angular NgModel不更新Typescript

了解类型规则中的关键字

缩小并集子键后重新构造类型

在Typescript 中,有没有`index=unfined的速记?未定义:某个数组[索引]`?

错误TS2403:后续变量声明必须具有相同的类型.变量';CRYPTO';的类型必须是';CRYPATO';,但这里的类型是';CRYPATO';

在HighChats列时间序列图中,十字准线未按预期工作

下载量怎么会超过下载量?

将带有样式的Reaction组件导入到Pages文件夹时不起作用

为什么在这种情况下,打字脚本泛型无法正确自动完成?

可赋值给类型的类型,从不赋值

T的typeof键的Typescript定义