2016-06-07 64 views
1

我有一个可以工作的ES2015项目,我想迁移到TypeScript。TypeScript:导入没有类型定义的ES2015模块

在我的解决方案我使用ES2015进口导入3-pary模块(通过NPM安装)是这样的:

import {ClassXY} from 'moduleXY' 

在我的项目设置打字稿后,打字稿编译器报告以下错误:

error TS2307: Cannot find module 'moduleXY' 

我怎样才能得到在TypeScript中工作的上述ES2015导入语句?

我找比通过typings安装相应的.d.ts声明以外的解决方案......我们假设模块moduleXY是不分配自己的.d.ts声明,也没有声明中使用,在DefinitelyTyped(或声明库已过时)。

我必须为模块moduleXY的类型定义创建存根吗?我将如何以最小的努力做到这一点?

回答

2

如果没有分型的模块,那么你可以 require它像一个普通的CommonJS的模块

declare require:any; 

const moduleXY:{ 
    classXY:any 
} = require("moduleXY"); 

中的.ts文件,并确保该文件中包含了打字稿编译器源。您不需要完全声明该模块,并且在开始添加向前移动类型的位置仍然可以获益。

+0

如果您使用模块加载器/打包器,这是否会执行任何操作以确保给定模块实际上被加载? – StriplingWarrior

+0

@StriplingWarrior遗憾的不是,但如果你使用WebPack和ts-loader,你可以使用require而不是import来加载模块 – Tadwork

+0

这似乎不工作......我得到一个编译错误:''{'expected'。 ..所以我认为声明的声明应该是'declare module'react-redux'{};'...这样摆脱了最初的编译错误('Can not find module ...')...但是TS仍然无法解决从'moduleXY'导入{ClassXY};'...由此产生的错误是现在'模块“moduleXY”没有导出成员'ClassXY'' – jbandi