如何告诉typescript编译没有显式继承

时间:2018-04-18 14:00:01

标签: typescript types declaration

我已经创建了mySomeClass,并且在构造函数中我使用Object.assign方法将someObject的所有属性复制到mySomeClass。

如何告诉编译器有关复制方法的类型?

import someObject from 'someLib';

class A {
 constructor(){
  Object.assign(this, someObject);
 }
}

let a = new A();

a.trigger();
  

错误:(149,9)TS2339:属性'触发'在' a'。

类型中不存在

2 个答案:

答案 0 :(得分:0)

使用extends关键字以类型脚本更好地理解的方式进行继承;像这样:

class A {
    field: string;
}

class B extends A { }

let b = new B();
console.log(b.field); // works!

答案 1 :(得分:0)

如果可以,您应该考虑使用简单继承,但如果您不能尝试以下其中一项:

您可以声明方法而不是初始化它们:

class A {
    trigger!: () => void
    constructor() {
        Object.assign(this, someObject);
    }
}

或者,如果您正在寻找一种不会强制重新声明所有字段的更通用的解决方案,您可以执行以下操作:

function assignExtends<T>(target: T): new () => T {
    return class {
        constructor() {
            Object.assign(this, target);
        }
    } as any
}
let someObject = {
    trigger() {
        console.log("D")
    }
}

class A extends assignExtends(someObject) {
    constructor() {
        super()
    }
}