TypeScript是否支持带有对象初始值设定项的构造函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript是否支持带有对象初始值设定项的构造函数?相关的知识,希望对你有一定的参考价值。

例如,在c#中,我们有以下代码段:

 class OrderLine
    {
        public OrderLine(){
          OrderId ="1",
          ItemTitle ="2"
        Console.WriteLine("constructing");
        }
        public string Platform { get; set; }
        public string OrderId { get; set; }
        public string ItemTitle { get; set; }
    }

    public static void Main()
    {
        var ol = new OrderLine 
        {
                Platform ="p"
        };
        Console.WriteLine(ol.Platform); 
    }

在打字稿中,如果我使用{}初始化对象,则无法调用构造函数,该构造函数可以为我提供一些默认值并执行其他操作。如果我使用新关键字进行默认构造,则编译器不允许我使用对象初始化程序(我使用的是angular 6),并且必须调用ol.Platform来分配属性值。当我有多个属性来设置值时,写多个“ ol”。不如使用对象初始值设定项语法快。有没有更好的方法?

答案

您可以让构造函数接受一个对象,该对象的每个属性都可以通过Object.assign分配给实例:

type Init = {
    age: number;
    gender: string;
};
class Foo {
    public name: string;
    public age: number | undefined;
    public gender: string | undefined;
    constructor(name: string, init?: Partial<Init>) {
        this.name = name;
        if (init) {
          Object.assign(this, init);
        }
    }
}
const f = new Foo('bob', { age: 10 });

以上是关于TypeScript是否支持带有对象初始值设定项的构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++17 中,可以使用带有初始值设定项的 if 语句来解压可选项吗?

TypeScript - 对象初始值设定项中的 Get 属性问题

在 C++ 中指定初始值设定项的情况下的模板参数推导

让编译器检查数组初始值设定项的数量

如何使用 clang 格式控制数组初始值设定项的缩进?

SwiftUI 分段控制