看不到 属性 的打字稿混入
Can't see property of typescript mixins
当我使用 mixins 时,我看不到(与 code/whisper)id
的 属性。
我的代码是:
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'
.
出了什么问题,我该如何解决?
通过将 Base
作为参数传递,您使用 typeof User
(构造函数类型)作为 TBase
而不是 User
([= 的类型14=] 实例)。我认为您只需要 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);
一些其他注意事项:
o
不需要 as any
。
- 旁注:如果您只想要
User
的形状而不需要实现,请使用 interface User { id: number; }
而不是 class
。那么您将不需要 @ts-ignore
。 Playground link.
当我使用 mixins 时,我看不到(与 code/whisper)id
的 属性。
我的代码是:
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'
.
出了什么问题,我该如何解决?
通过将 Base
作为参数传递,您使用 typeof User
(构造函数类型)作为 TBase
而不是 User
([= 的类型14=] 实例)。我认为您只需要 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);
一些其他注意事项:
o
不需要as any
。- 旁注:如果您只想要
User
的形状而不需要实现,请使用interface User { id: number; }
而不是class
。那么您将不需要@ts-ignore
。 Playground link.