首页 > 解决方案 > 错误:将 Thrift 与 Typescript 一起使用时找不到名称“Thrift”

问题描述

我想在我的 Nodejs 项目中使用 Thrift 和 Typescript 这是我遇到的错误

src/gen-js/myService.d.ts:9:12 - error TS2503: Cannot find namespace 'Thrift'.

10     input: Thrift.TJSONProtocol;
              ~~~~~~
src/gen-js/myService.d.ts:10:1 - error TS2503: Cannot find namespace 'Thrift'.

11     output: Thrift.TJSONProtocol;
               ~~~~~~
error TS2304: Cannot find name 'Thrift'.

...(more of the same)

src/gen-js/myService_types.d.ts:198:32 - error TS2304: Cannot find name 'Thrift'.

198   class StoreException extends Thrift.TException {
                               ~~~~~~
...(more of the same)

我已经安装@types/thrift并设置了我的 tsconfig.json 如下

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es2017",
    "noImplicitAny": true,
    "moduleResolution": "node",
    "inlineSourceMap": true,
    "outDir": "dist",
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "baseUrl": ".",
    "paths": {
      "*": ["node_modules/*", "src/types/*"]
    },
    "lib": [
      "dom",
      "esnext"
    ]
  },
  "include": ["src/**/*"]
}

看起来不错吧?并且仍然遇到错误。知道如何成功构建它吗?

PS 我正在使用 Typescript 3.2、Thrift v0.11 和 @types/thrift 0.10.7

标签: typescriptthrifttypescript-typings

解决方案


安装类型后,您仍然需要在引用它们之前导入它们。

编辑:

查看类型定义后,它不是.. 理想的类型。如果使用通配符导入类型(第二个示例),还有一个嵌套Thrift命名空间

import { Thrift, TJSONProtocol } from 'thrift';

const protocol: TJSONProtocol = // instance;

class StoreException extends Thrift.TException {}

或者

import * as Thrift from 'thrift';

const protocol: Thrift.TJSONProtocol = // instance;

class StoreException extends Thrift.Thrift.TException {}

推荐阅读