外部文件无法在Typescript中编译

时间:2016-12-12 09:57:30

标签: session typescript express-session

我正在使用带有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"
  ]
}

2 个答案:

答案 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()有效!