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

时间:2018-07-16 06:58:00

标签: typescript

例如

IList<Payments> newPayments = activityViewModel.Payments.Select(p => mapper.Map<PaymentViewModel, Payments>(p)).ToList();

foreach (var payments in newPayments)
{
    ctx.Entry(payments).State = payments.ID == 0 ? EntityState.Added : EntityState.Modified;
    ctx.Payments.Add(payments);
}

ctx.SaveChanges();

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

yarn add http-status-codes

Typescript抱怨“找不到模块http-status-codes”。 但是 http状态代码已经提供了自己的import { BAD_GATEWAY } from 'http-status-codes'; 类型定义文件。

出于某种原因,该行为仅可使用“ target”:“ es6”或更高版本进行复制index.d.ts出于某种原因没有问题)。

为什么我不能使用可用的打字文件?这不是现代包装应该像开箱即用那样工作的方式,又需要额外的"es5"吗? (实际上并不存在)。从包含其类型定义的包中导入,我该怎么做?为什么这不是默认设置?

1 个答案:

答案 0 :(得分:1)

如果您指定es6,则该模块系统将默认为该版本的ES的本机模块系统(ES2015模块系统)。从documentation

  

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

您可以阅读文档以获取更多信息,但是clasic的解决方案策略并未使用node_modules来查找定义,而node则模仿了节点查找模块的方式(在{ {1}})。

您需要将node_modules选项添加到tsconfig.json中:

moduleResolution

这对{ "compilerOptions": { "moduleResolution": "node", "target": "es6", } } 有用,因为对于es5,模块系统默认为es5see docs),默认情况下使用节点解析。