【问题标题】:Nodejs Typescript type only package is not exporting all types properlyNodejs Typescript 仅类型包未正确导出所有类型
【发布时间】:2020-06-22 18:55:07
【问题描述】:

我正在构建的包 (https://github.com/plastikfan/xiberia/tree/develop) 是一个仅限类型的包(我没有使用 DefinedTyped,这个问题与 DT 无关)。

该包本质上只是一个文件(index.ts),其中包含各种导出类型,例如:

export interface IYargsFailHandler {
  (msg: string, err: Error, inst: yargs.Argv, command: any): yargs.Argv;
}

问题是,当我在客户端应用程序中使用它时,大多数类型都丢失了,智能感知出现的唯一类型是:

export const CoercivePrimitiveStrArray = ['boolean', 'number', 'symbol'];

所有其他类型都丢失了。

当我查看相应的 index.js 文件时,它包含的只是:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoercivePrimitiveStrArray = ['boolean', 'number', 'symbol'];
// -----------------------------------------------------------------------------
//# sourceMappingURL=index.js.map

生成的 index.d.ts 看起来正确并包含所有类型,(文件末尾有一个我无法解释的非常奇怪的定义):

export {};

我的打字稿配置文件是:

{
  "compilerOptions": {
    "allowJs": true,
    "alwaysStrict": true,
    "esModuleInterop": true,
    "module": "commonjs",
    "moduleResolution": "Node",
    "noImplicitAny": true,
    "sourceMap": true,
    "strictNullChecks": true,
    "target": "es5",
    "declaration": true,
    "declarationDir": "./dist",
    "outDir": "./dist",
    "diagnostics": true,
    "lib": [
      "es5",
      "es2015",
      "es6",
      "dom"
    ],
    "types": [
      "node", "yargs"
    ],
  },
  "include": [
    "./index.ts"
  ],
  "exclude": [
    "node_modules",
    "dist"
  ]
}

那么为什么大多数类型都丢失了,我该如何纠正呢,谢谢。

编辑:糟糕,我犯了一个非常愚蠢的错误。这些类型不应在生成的 .js 文件中。唯一有效的 js 确实是正在导出的 CoercivePrimitiveStrArrayCoercivePrimitiveStrArray。

但这并不能解释为什么正在导出的类型在客户端的智能感知中没有显示。

所以在客户端,这就是我所拥有的:

在客户端文件中:

import * as xiberia from 'xiberia';

当我输入“xiberia.”时,我希望看到所有正在导出的类型,但我没有看到任何类型。

我阅读了三斜杠指令,看来它们不适合这种情况。

那么我还需要什么其他配置设置才能让 te intellisense 按预期工作?

【问题讨论】:

    标签: node.js typescript typescript-typings


    【解决方案1】:

    我通过尽可能简化包来解决这个问题。以前,我将人工制品构建到“dist”文件夹中,这是一种广泛使用的模式。我已经删除了这个(这是一个简单的单个文件包,所以使用 dist 文件夹是多余的),并简单地将生成的 index.d.ts、index.js 和 .map 文件构建到根目录中。这也需要在 package.json 的 'files' 属性中明确指定这些文件(这样可以确保这些文件包含在通过发布机制执行 npm pack 时构建的结果包 tarball 中)。

    我不明白为什么现在智能感知由于这些操作而起作用;或许知道的人可以评论一下。

    【讨论】:

    • 我刚刚发现,智能感知不再工作。 Visual Studio 代码在智能感知方面非常不稳定,这与最初将我吸引到打字稿中的有关此功能的所有疯狂声明相反。不要相信我猜的炒作。
    猜你喜欢
    • 2020-12-14
    • 2016-07-17
    • 1970-01-01
    • 2021-05-10
    • 2018-06-04
    • 1970-01-01
    • 2021-12-08
    • 2019-04-30
    • 2020-07-25
    相关资源
    最近更新 更多