2016-03-08 19 views
9

Mamy projekt wykorzystujący TypeScript z ts-loader w Webpacka, ponieważ większość rzeczy, których używaliśmy, to definicje typów w Definitely Types (via typings), ale nie dla tego, którego teraz chcieliśmy użyć: redux-auth.Jak zaimportować zwykły JS do TypeScript (bez typów)

Początkowo nie miałem module zdefiniowane w tsconfig.json i importowanie go poprzez

import { EmailSignInForm } from "redux-auth/bootstrap-theme" 

spowodowało Cannot find module. Następnie czytamy, że używanie notacji CommonJS może pomóc, ale nie było, ponieważ TS nie wiedział o członkach importowanego modułu (Property 'EmailSignInForm' does not exist on type '{}'). Używanie ścieżki względnej również nie przynosi niczego pożytecznego.

Również przeczytałem w this article about TS 1.8, że powinien teraz obsługiwać zwykłe pliki JS, ale nie wyjaśnia dokładnie, w jaki sposób. allowJs jest włączone.

Jak mogę zaimportować ten moduł? Dzięki!

To nasze webpack.config.js:

var webpack = require('webpack'); 
var fail = require('webpack-fail-plugin'); 

module.exports = { 
    entry: './static/files/app/main.tsx', 

    output: { 
    path: './static/files/', 
    filename: 'bundle.js', 
    sourceMapFilename: '[file].map' 
    }, 

    resolve: { 
    extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] 
    }, 

    module: { 
    loaders: [ 
     { 
     test: /\.tsx?$/, 
     loader: 'ts-loader', 
     }, 
    ] 
    }, 

    devtool: 'source-map', 

    plugins: [ 
    fail, 
    new webpack.ProvidePlugin({ 
     //Promise: 'exports?global.Promise!es6-shim', 
     fetch: 'imports?this=>global!exports?global.fetch!whatwg-fetch' 
    }) 
    ] 
}; 

a nasz tsconfig.json:

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "target": "es5", 
    "jsx": "react", 
    "sourceMap": true, 
    "allowJs": true, 
    "noEmitOnError": true 
    }, 
    "files": [ 
    "typings/browser.d.ts" 
    ], 
    "exclude": [ 
    "typings/main.d.ts", 
    "typings/main", 
    "node_modules" 
    ] 
} 

("module": "commonjs" był tymczasowy przetestować notacji CommonJS)

UPDATE :

OK, więc jeśli I declare var require: any i używam ścieżki względnej w require(), mogę ją zaimportować, chociaż wątpię, że jest to zamierzony sposób. Zabawne teraz otrzymuję tę wiadomość od Webpack:

WARNING in ./~/encoding/lib/iconv-loader.js 
Critical dependencies: 
9:12-34 the request of a dependency is an expression 
@ ./~/encoding/lib/iconv-loader.js 9:12-34 

ERROR in ./~/iconv-lite/encodings/tables/gb18030-ranges.json 
Module parse failed: ./node_modules/iconv-lite/encodings/tables/gb18030-ranges.json Line 1: Unexpected token : 
You may need an appropriate loader to handle this file type. 
+0

To jest zamierzony sposób z tego, co zbieram. – Angad

+0

Moja odpowiedź tutaj może pomóc: http://stackoverflow.com/questions/37656592/define-global-variable-with-webpack/40416826#40416826 – prograhammer

Odpowiedz

2
# declarations.d.ts 
declare module '*'; 

# someFile.ts 
import * as $ from 'jquery'; 
import * as _ from 'lodash'; 

Jeśli masz typy dla uzupełniania kodu jeden moduł powinien działać i kompilator będzie Zakładam, że wiesz, co robisz. Myślę, że ts loader również powinien to uszanować. Proszę przetestuj i daj mi znać.

+0

Brakowało mi tego, że instrukcja "declare" musiała być początkowo w oddzielnym pliku. Dodanie pliku 'declaations.d.ts' zawierającego' declare module 'libToInclude'; 'pracował dla mnie. –

+0

, więc możesz oznaczyć jako rozwiązany? – qballer

+0

Idk, co masz na myśli. Nie zadałem tego pytania. Właśnie komentowałem, aby, miejmy nadzieję, powstrzymać innych od spędzenie czasu próbując to zrozumieć. Myślę, że przeczytałem tę odpowiedź zbyt szybko, ponieważ przeglądałem wyniki wyszukiwania Google ... –

Powiązane problemy