【发布时间】:2017-11-13 13:55:12
【问题描述】:
假设我有一个像这样的类层次结构:
// monorepo/src/package1/file1.ts
export class AbstractModel implements Hashable {
assignFromHash(hash: Object): void {
Object.assign(this, hash);
}
}
// monorepo/src/package2/file2.ts
export abstract class Model extends AbstractModel {}
// monorepo/src/package2/file3.ts
export class ModelImpl extends Model {}
// monorepo/src/application/file4.ts somewhere in application.
// Here object `model`, because of the angular DI setup,
// is an instance of ModelImpl
(model: Model ) => {
model.assignFromHash({});
}
使用tsc -p . 和以下tsconfig.json 编译时:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"skipLibCheck": true,
"noStrictGenericChecks": true,
"lib": [
"dom",
"es2015"
],
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"target": "es5"
},
"include": [
"./**/*.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
我得到:
error TS2339: Property 'assignFromHash' does not exist on type 'Model'.
我错过了什么?如何解决这个问题?
注意:
拥有中间类
Model的原因是能够在registering providers 时使用Angular 的DI 功能。由于 typescript 接口和 javascript 的明显限制,我无法使用接口。我也不能使用AbstractModel,因为那样太笼统了。monorepo存储库由 lerna 处理没有语法错误。点只是说明它是
object占位符的一种方式,真正的代码有一个正确定义的对象哈希。
像往常一样,这个问题是由于对幕后发生的事情的错误理解造成的。为了坚持堆栈溢出方式,我将发布结果作为答案。
提前致谢。
【问题讨论】:
标签: angular typescript ionic2 class-hierarchy