2017-07-03 8 views
1

既存のコードベースをjs/react/jsx setupからTypeScriptに変換しています。もちろん、ファイルごとにファイルを作成したいのですが、既存のjsコードベースでTSコンパイラを動作させるアプローチについての質問があります。TypeScriptでインポートされたモジュールのタイプを増やす

私はファイルindex.jsを変換するが、今のところはJavaScriptでfoo.jsを残したい:

// index.ts 

import { fooFunction } from 'foo'; 

foo({ val: 1 }); 

// foo.js 

export const fooFunction = ({ val, optionalProp }) => { 
    //... 
} 

活字体が自動的にfooに引数を推測し、そのProperty 'optionalProp' is missing in type { val:string, optionalProp:any }

を文句を言い、この例では問題

「スタブ」する必要があるタイプはfooFunctionを探して送ったD私はそれを行うことができるかもしれませんいくつかの方法を見つけました:

1)使用インポート

// index.ts 
var fooFunction: any = require('foo').fooFunction; 

2の代わりに必要)宣言

? 

3)をマージfooのカスタム宣言を含むd.tsファイルを追加しようとしましたが、不都合があります

(1)私はインポート構文を使い続けたいので、(3)のように宣言ファイルを追加する必要があります後で私はfooに変換する準備ができています。

(2)私は素晴らしい解決策を見つけられません。

// index.ts 

declare module 'foo' { 
    function fooFunction(options: any): any 
} 

が仕事と私はそれを行うにはどうすればよいCannot redeclare block-scoped variable 'fooFunction'

をスローしませんか?私がしようとしていることの例を持っているドキュメントがありますか、そして/または宣言のマージについてもっと説明がありますか?namespace/interface/valueとどう対処するのですか? TypeScriptへ段階的に移行するためのより良いアプローチはありますか?

+0

同じ質問があるかもしれない人のために、私は宣言ファイルの使用を選択しました。この例では、 'foo.d.ts'ファイルを作成します。だから、私は 'foo.d.ts'と' foo.js'を持っています。 'fooを変換するとき。js'をTSに変換すると、宣言ファイルが不要になる可能性があるので、 –

答えて

0

これは機能しないかもしれませんが、これを序文にしたいと思っています - 私はReactについて詳しくは分かりませんが、変数に?を使用して "オプション"にすることができます。私は機能

myFooFunction(requiredParam: typeA, optionalParam?: typeB) { ... } 

で前にこれを使ってきたあなたが考慮すべきもう一つは、活字体は、コンパイル時にチェックするいくつかのタイプを追加することができますので、IMOあなたはできるだけ多くを活用すべきであるという事実です。

編集:オプションのパラメータを使用するには、そのパラメータが存在するかどうかを確認するだけです。

myFooFunction(requiredParam: typeA, optionalParam?: typeB) { 
    if (optionalParam) { // if this results to true, the param was given 
    //do something 
    } 
} 
+0

を削除する予定ですが、 'foo.js'の' fooFunction'は純粋なJavaScriptであり、TypeScriptではありません –

関連する問題