首页 > 解决方案 > 看不到 typescript mixins 的属性

问题描述

id当我使用 mixins 时,我看不到我的财产(相对于代码/耳语) 。

我的代码是:

class User {
    // @ts-ignore
    id: number;
} 

function Parent<TBase>(Base: TBase) {
  return class ParentChild {  
    _object: TBase;

    constructor (o: TBase) {
        this._object = o;
    } 

    dump(): void {
        console.log(this._object);
    }
  };
}

class Test extends Parent(User) {

}

const o = {id: 2} as any;
const i = new Test(o);

// problem
console.log(i._object.id);

问题console.log(i._object.id);在线。我收到一个错误:Property 'id' does not exist on type 'typeof User'

出了什么问题,我该如何解决?

标签: typescriptmixinsextends

解决方案


通过Base作为参数传递,您使用typeof User的是(构造函数类型)TBase而不是UserUser实例的类型)。我想你只是想要User,通过指定通用参数:

class User {
    // @ts-ignore
    id: number;
} 

function Parent<TBase>() {
//             ^^^^^^^^^
  return class ParentChild {  
    _object: TBase;

    constructor (o: TBase) {
        this._object = o;
    } 

    dump(): void {
        console.log(this._object);
    }
  };
}

class Test extends Parent<User>() {
//                 ^^^^^^^^^^^^^^

}

const o = {id: 2} as any;
const i = new Test(o);

// problem
console.log(i._object.id);

游乐场链接

其他几点注意事项:

  • 不需要as anyon o
  • 旁注:如果您只想要不User实现的形状,请使用interface User { id: number; }而不是class. 那么你就不需要@ts-ignore. 游乐场链接

推荐阅读