typescript - 看不到 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'
。
出了什么问题,我该如何解决?
解决方案
通过Base
作为参数传递,您使用typeof User
的是(构造函数类型)TBase
而不是User
(User
实例的类型)。我想你只是想要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 any
ono
。 - 旁注:如果您只想要不
User
实现的形状,请使用interface User { id: number; }
而不是class
. 那么你就不需要@ts-ignore
. 游乐场链接。
推荐阅读
- node.js - 公牛队列:通过在 jobId 中使用部分时间戳确保时间段内的唯一作业
- javascript - 用于转换 JSON 结构的 Javascript 递归函数
- xamarin - 使用 MVVMCross 为 Xamarin.android 和 Xamarin.ios 应用程序创建 3 个选项卡
- xsl-fo - 一个块中有多个内联容器 - 不能让它们中断到下一页
- java - Java中的硬编码值
- java - LayoutParams.MATCH_PARENT 不起作用,但整数起作用
- php - XML 节点访问属性与命名空间
- python - 从服务器中删除 Python
- c# - 无法将用户添加到角色 Web Api
- python - google.api_core.exceptions.ServiceUnavailable:503 从插件获取元数据失败并出现错误:“str”对象没有属性“before_request”