2017-02-06 3 views
0

私はテキストエディタとしてAtomを使用してTypescriptでプロジェクトを構築しています。 atom-typescriptがインストールされています。これは自分のコードを自動的にJavaScriptにコンパイルしています。Typescriptには拡張メソッドが含まれています

私がしようとしているのは、文字列型に新しい拡張メソッドを定義して、nullか空白かを判断することです。私は単一の関数をエクスポートするメインファイルと、それを検証しようとしているモカテストがすべて動作しています。ここでString.isNullOrEmpty is not a function

は私stringExtensions.tsです:

main.ts
interface StringConstructor { 
    isNullOrEmpty(str: string): boolean; 
} 

String.isNullOrEmpty = function(str: string): boolean{ 
    return (!str || 0 === str.length); 
} 

私は次のコードを持っている:main.spec.ts

///<reference path="extensions/stringExtensions.ts"/> 
export function checkForUpdate(){ 
    if(String.isNullOrEmpty(location)){ 
    /* Do Stuff */ 
    } 

を私はに実行しています問題は、モカは型エラーを投げているということです

import {checkForUpdate} from "../lib/update" 
describe("test",()=>{ 
    if("should do something",()=>{ 
    checkForUpdate(); 
    }) 
}) 

拡張ファイルからメインファイルに自分のコードをコピーすると、すべて正常に動作しているので、これは参照の問題です。 Atom-typescriptはエラーを投げていないので、コードをうまく見つけることができ、すべてが終わりに良く見えます。

参照が正しく機能するためには、どのような変更が必要ですか。私はコンパイルされたJavaScriptコードを見ていて、参照コマンドからのインポート命令はありません。そこにあるはずですか?

答えて

0

ここで問題となるのは、typescriptが三角スラッシュ参照のためにisNullOrEmptyの定義を見つけることができることです。しかし、実行が関数がバインドされているポイントに到達していませんString。関数を呼び出すしようとすると、String.isNullOrEmptyundefinedである理由である

String.isNullOrEmpty = ... 

が実行されていないコードの行をすなわち。これを修正するには、簡単に

import './<path-to-file>/stringExtensions.ts' 

をmain.tsに追加してください。インポートによってコードがstringExtensions.tsに実行され、関数はcheckForUpdate関数内で使用可能になります。

関連する問題