2016-03-08 11 views
9

Abbiamo un progetto che utilizza TypeScript con ts-loader in Webpack, per la maggior parte delle cose che abbiamo utilizzato ora c'erano definizioni di tipi in Tipi definiti (tramite typings), ma non per quello che volevamo usare ora: redux-auth.Come importare JS semplice in TypeScript (senza digitazioni)

In un primo momento non avevo module definita nel tsconfig.json e l'importazione via

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

provocato Cannot find module. Quindi leggiamo che l'uso della notazione CommonJS potrebbe essere d'aiuto, ma non lo era, dal momento che TS non sapeva dei membri del modulo importato (Property 'EmailSignInForm' does not exist on type '{}'). L'utilizzo del percorso relativo non fa nulla di utile.

Inoltre ho letto in this article about TS 1.8 che ora dovrebbe supportare file JS semplici, ma non spiega esattamente come. allowJs è abilitato.

Come si importa quel modulo? Grazie!

Questo è il nostro 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' 
    }) 
    ] 
}; 

e la nostra 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" 
    ] 
} 

(Il "module": "commonjs" era temporanea per testare la notazione CommonJS)

UPDATE :

Ok, quindi se ho declare var require: any e utilizzo il percorso relativo in require() posso importarlo, anche se dubito che questo sia il modo previsto. Stranamente ora ottengo questo messaggio da 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

Questo è il modo previsto da ciò che ho raccolto – Angad

+0

La mia risposta qui potrebbe aiutare: http://stackoverflow.com/questions/37656592/define-global-variable-with-webpack/40416826#40416826 – prograhammer

risposta

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

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

Se si dispone di tipi per il completamento del codice un modulo dovrebbero funzionare e il compilatore assumere si sa cosa si sta facendo. Penso che ts loader dovrebbe rispettare anche quello. Per favore prova e fammi sapere.

+0

Ho perso il fatto che l'istruzione 'declare' doveva essere inizialmente in un file separato. Aggiungere un file 'declarations.d.ts' che contiene' declare module 'libToInclude'; 'ha funzionato per me. –

+0

quindi puoi contrassegnare come risolto? – qballer

+0

Idk cosa intendi. Non ho fatto la domanda. Stavo solo commentando, spero, che altri non passino un po 'di tempo cercando di capirlo. Penso di aver letto questa risposta troppo velocemente mentre stavo esaminando i risultati di ricerca di Google ... –

Problemi correlati