代码之家  ›  专栏  ›  技术社区  ›  Enn

如何在typescript中对object.assign使用StringPropertyInitialization

  •  1
  • Enn  · 技术社区  · 7 年前

    我有一门课

    export class Config{
    
        public doSomething: boolean;
        public doSomethingOptionally?: boolean
    
        constructor(data: {
            doSomething: boolean,
            doSomethingOptionally?: boolean
        }) {
            Object.assign(this, data);
        }
    }
    

    以这种方式向构造函数传递数据非常简单,IntelliSense足够智能,不允许开发人员创建 Config 类而不指定 doSomething 属性,但它没有 doSomethingOptionally .

    这一切都很好,但只要我能 strictPropertyInitialization 在里面 tsconfig.json 我有很多错误,因为 剂量测定法 未初始化。

    最好的解决方法是什么?

    我不想:

    1. 指定默认值(对象可能非常大)
    2. 使用 doSomething: boolean = {} as any;
    3. 在构造函数外赋值 data 属性,因为可能有很多参数,调用构造函数对我来说太难看了
    4. 制作 剂量测定 接受未定义的值
    1 回复  |  直到 7 年前
        1
  •  2
  •   Titian Cernicova-Dragomir    7 年前

    一种解决方案是让编译器知道哪些属性是通过 Object.assign 使用 definite assignment assertion

    export class Config{
    
        public doSomething!: boolean;
        public doSomethingOptionally?: boolean
    
        constructor(data: {
            doSomething: boolean,
            doSomethingOptionally?: boolean
        }) {
            Object.assign(this, data);
        }
    }
    
    推荐文章