我正在使用带有Typescript的快速会话并遇到以下错误消息 -
遇到预期的问题“Session”
类型中不存在“authz”属性为了解决这个问题,我确实添加了一个名为session.d.ts的新外部文件,其中包含以下内容 -
import { Resources, ResourceAuth, Authz } from "../../models/Authz"
declare namespace Express {
export interface Session {
authz: Array<ResourceAuth>;
}
}
在我的控制器中,我有以下内容 -
/// <reference path="../../../@types/session/session.d.ts" />
但是,我仍然一直收到错误。看起来我的d.ts文件没有被拿起。这是我的tsconfig。我错过了什么?
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "build",
"sourceMap": true,
"typeRoots": [
"../node_modules/@types",
"./@types"
],
"types": [
"core-js"
]
},
"include": [
"src/**/*.ts",
"src/@types/**/*.d.ts"
],
"exclude": [
"node_modules"
]
}
答案 0 :(得分:0)
不要在定义文件中执行导入/导出语句。
您实际想要做的是扩展现有的接口Session。您可以使用此处描述的普通* .ts文件/模块中的接口合并来执行此操作: https://www.typescriptlang.org/docs/handbook/declaration-merging.html
但是,由于您尝试扩展的接口位于不同的命名空间中,因此无法正常工作。我有同样的问题,并在这里问: Typescript: How to extend an existing interface in a globally declared namespace
因为你需要一个解决方案:我通常做的是转换为任何然后访问该值,因为我知道它在那里:
let mySession: express.Session = session;
let authz = (<any>mySession).authz;
答案 1 :(得分:0)
我意识到如果我使用数组符号,它就可以正常工作。
所以会话[&#39; anyreally&#39;] = Authz.getAuthz()有效!