2017-06-17 540 views
1

我试图在TypeScript程序中使用BigNumber版本4.0.2。我创建写在打字稿一个简单的Node.js程序使用BigNumber此问题 https://github.com/naddison36/node-importsTypeScript BigNumber的类型定义

我真的努力让打字稿2.3.4在BigNumber类型定义拉的剥离下来的例子。有谁知道如何做到这一点?这是我到目前为止已经试过https://github.com/naddison36/node-imports#attempts-to-get-the-bignumber-type-definitions-to-work

理想情况下,我想简单地运行npm install bignumber.js --savenpm install @types/bignumber.js --save,使用ES6进口像import BigNumber from 'bignumber.js'和具有打字稿只是工作。

任何帮助,将不胜感激

回答

1

进口风格

import BigNumber from 'bignumber.js'; 

只有在库中指定一个默认的出口,但是当你在GitHub的仓库注意工作。

Changing line 10 from export = BigNumber; to export default BigNumber; fixes the above error but introduces the following error:

Error:(6, 15) TS2709:Cannot use namespace 'BigNumber' as a type.

这是因为bignumber.js的分型使用namespace宣布,而不是module。我不知道你能解决的分型,因为他们,但改变他们这么一开始去

export default BigNumber; 
declare module 'bignumber.js' { 
var BigNumber: BigNumberStatic; 

,而不是

declare var BigNumber: BigNumber.BigNumberStatic; 

export as namespace BigNumber; 
export = BigNumber; 

declare namespace BigNumber { 

工作在bignumber一切正常进口对我很好。 js

import * as b from 'bignumber.js' 
new b.BigNumber(123) 

import b from 'bignumber.js' 
new b(123) 

import {BigNumber} from 'bignumber.js' 
new BigNumber(123) 
+1

谢谢,您刚从我的项目中删除了200多个TypeScript错误。我会为类型定义提交一个PR。 – naddison

+0

感谢开放公关,让世界变得更美好 – Catalyst

0

所以这样做似乎工作:

import * as BigNumber from 'bignumber.js'; 
const result: BigNumber.BigNumber = new BigNumber(2); 

可能的解释:

的分型声明一个变量,命名空间并重命名为BigNumber

declare var BigNumber: BigNumber.BigNumberStatic; 
export as namespace BigNumber; 

在导入代码中,您导入的作为* as BigNumber引用了名称空间,而new BigNumber引用的是引用声明的变量。

+0

是的,这将起作用。但问题是,您必须使用'BigNumber.BigNumber'作为类型。一种缩短这种情况的方法是将 ''' import *作为'bignumber.js'中的BigNumber; 输入BN = BigNumber.BigNumber; const result:BN = new BigNumber(2); ''' 但是,这引入了一个额外的类型定义行,我想避免 – naddison

相关问题