繁体   English   中英

导入已附带index.d.ts的软件包

[英]Import a package which already ships an index.d.ts

例如,

yarn add http-status-codes

如果我从该包中导入某些内容,例如

import { BAD_GATEWAY } from 'http-status-codes';

Typescript抱怨“找不到模块http-status-codes”。 但是 http-status-codes已经提供了它自己的index.d.ts类型定义文件。

出于某种原因,这种行为只能用“目标”可重放:“ES6”以上 (没有问题"es5"出于某种原因)。

为什么我不能使用可用的打字文件? 这不是现代包装应该像开箱即用那样工作的方式,也就是不需要额外的yarn add @types/http-status-codes吗? (实际上并不存在)。 从包含其类型定义的包中导入,我该怎么做? 为什么这不是默认值?

如果指定es6则模块系统将默认为该版本的ES的本机模块系统( ES2015模块系统)。 文档中

有两种可能的模块解析策略:Node和Classic。 您可以使用--moduleResolution标志来指定模块解析策略。 如果未指定,则默认值为--module AMD | Classic。 系统| ES2015或Node。

你可以阅读更多的信息,但该文档clasic解决策略不使用node_modules找到的定义,而node模仿发现模块的节点方式(看起来在node_modules的定义)。

您需要在moduleResolution tsconfig.json添加tsconfig.json选项:

{
    "compilerOptions": {
        "moduleResolution": "node",
        "target": "es6",
    }
}

这适用于es5因为对于es5 ,模块系统默认为"CommonJS"请参阅docs ),默认情况下使用节点解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM