【发布时间】:2017-11-22 21:43:31
【问题描述】:
我收到以下错误:
src/models/priceAdjustment.ts(55,2): error TS2345: Argument of type '{ as: string;外键:字符串; gql:任何; }' 不可分配给“AssociationOptionsHasMany”类型的参数。 对象字面量只能指定已知属性,而 'AssociationOptionsHasMany' 类型中不存在 'gql'。
错误很明显,我正在尝试分配一个不存在的“gql”键(我正在附加它,以便稍后在我的代码中的其他地方访问它)。
我想做的是扩展model.hasMany interface here,并添加我自己的密钥。这可能吗?如果是,我该怎么做?
我目前的解决方法是在传递对象之前将其转换为<any>,这感觉像是一种肮脏的解决方法。
我尝试了以下方法:
import Sequelize from 'sequelize';
export declare module Sequelize {
export interface MyAssociationOptionsHasMany extends Sequelize.AssociationOptionsHasMany {
gql?: any
}
export interface MyAssociations extends Sequelize.Associations {
hasMany(target: Sequelize.Model<any, any>, options?: MyAssociationOptionsHasMany): void;
}
}
现在我收到以下错误:
TypeError: Cannot read property '239' of undefined
at getDeclarationSpaces (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:33121:54)
at checkExportsOnMergedDeclarations (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:33067:41)
at checkModuleDeclaration (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35036:17)
at checkSourceElement (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35505:28)
at Object.forEach (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:275:30)
at checkSourceFileWorker (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35566:20)
at checkSourceFile (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35551:13)
at getDiagnosticsWorker (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35604:17)
at Object.getDiagnostics (C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:35593:24)
at C:\Users\user\AppData\Roaming\npm\node_modules\typescript\lib\tsc.js:56188:85
【问题讨论】:
-
@Mörre 由于这是我专门为我的应用程序创建的属性,并且与 sequelize 无关(在我的应用程序中除外),因此将该更改提交到存储库是错误的。
-
Typescript 执行 declaration merging,因此您应该能够通过添加到界面来创建自己的定义文件。
-
尝试在文档中查找合并声明
标签: javascript node.js typescript definitelytyped