2017-02-27 82 views
0

我對我的項目使用typescript,並使用i18next進行內部化。Uncaught TypeError:i18next.init不是函數

打字稿:v2.1.4

i18next:v2.3.4

@類型/ i18next:v2.3.35

在我的文件

import * as i18next from 'i18next'; 

i18next.init({ 
    lng: 'en', 
    resources: { 
     en: { 
      translation: { 
       "key": "hello world" 
      } 
     } 
    } 
}, (err, t) => { 
    // initialized and ready to go! 
    const hw = i18next.t('key'); // hw = 'hello world' 
}); 

然而,在瀏覽器,它說:

Uncaught TypeError: i18next.init is not a function 

如果我登錄的i18next對象,它看起來像:

enter image description here

,並在控制檯

i18n.default.init 

效果很好。

如果像在Visual Studio中的代碼將文件

import i18next from 'i18next'; 

進口抱怨: enter image description here

我.tsconfig

{ 
    "compileOnSave": true, 
    "compilerOptions": { 
     "removeComments": false, 
     "baseUrl": "./src", 
     "target": "es6", 
     "moduleResolution": "node", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "noImplicitAny": true, 
     "strictNullChecks": true, 
     "jsx": "preserve", 
     "lib": [ 
      "es2017", 
      "dom" 
     ], 
     "typeRoots": [ 
      "./node_modules/@types" 
     ], 
     "types": [ 
      "node", 
      "poly2tri", 
      "three", 
      "i18next" 
     ] 
    } 
} 

我webpack.config.js是太長時間閱讀。

我不知道是什麼涉及到文檔:http://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-class-d-ts.html

/*~ Note that ES6 modules cannot directly export class objects. 
*~ This file should be imported using the CommonJS-style: 
*~ import x = require('someLibrary'); 
*~ 
*~ Refer to the documentation to understand common 
*~ workarounds for this limitation of ES6 modules. 
*/ 
+0

你如何在瀏覽器中運行你的代碼?我測試了它(在NodeJS中),init函數與'import *'一起作爲'i18next'的i18next' – unional

+0

我使用'i18next @ 7.1.0'你 – unional

+0

我正在使用webpack。 –

回答

1

你的問題是關係到

https://github.com/Microsoft/TypeScript/issues/7398

https://github.com/Microsoft/TypeScript/issues/8687

https://github.com/systemjs/systemjs/issues/1587

在TypeScript和Babel/NodeJS中模塊解析語法會發生什麼變化。

在巴別/的NodeJS(最新草案),CommonJS的模塊使用的語法的輸入:

import i18n from 'i18next' 

即CommonJS的模塊被移動到出口default ES6模塊。

然而,打字稿不遵循這條路線:

import * as i18n from 'i18next' 

因此,當tsces6編譯,這import語句保持原樣。 因此,巴別做錯了事。

請幫助提高你在上述問題的聲音,以獲得更多的團隊關注。

這個問題應該真的是一個P1並儘快解決。

現在,一種解決方案是將代碼編譯爲es5到tsc

相關問題