コンパイラは、使用するように指示したlibに基づいて機能をサポートしています。
target
とlib
compiler optionsを使用することにより、コンパイラが使用するはlibかを制御するには2つの方法があります。それは上記のリンクに書かれているとおり
:--libは、デフォルトのライブラリを指定されていない場合
が注入されます。注入されたデフォルト ライブラリです:
►--target ES5について:DOM、ES5、ScriptHost
► --target ES6の場合:DOM、ES6、DOM.Iterable、ScriptHost
異なるのすべてlibsはpart of the projectです。
あなたは、あなたが(あなたが述べたように)それはes6
機能だとしてNumber.isInteger()
を使用することはできませんes3
またはes5
をターゲットにしている場合。あなたはそのためのpolyfilをお持ちの場合
は、あなたはまだes6
LIBとes5
をターゲットにすることができます:
--target es5 --lib DOM,ES6,ScriptHost
それとも、ただlib.es6.d.tsの定義をコピーすることができます。
interface NumberConstructor {
isInteger(number: number): boolean;
}
理由let
、const
、for/of
のようなものをターゲットに関係なく使用できることは、コンパイラが同等のコードを生成する方法を知っていることです選択されたターゲットに対して機能がサポートされていない場合でも、例えば
:ターゲットが指定されていない場合は
var arr = [1, 2, 3];
for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
var num = arr_1[_i];
}
:
const arr = [1, 2, 3];
for (let num of arr) {}
がにコンパイルされます。
ご覧のとおり、とlet
はvar
になり、for/in
は通常のfor
に変わります。
Number.isInteger()
は異なるものですが、それはPromise
や 'シンボル'のような特定のターゲットには存在しない機能です。
コンパイラはpolyfillを追加しません。追加するのはあなた次第です。それがコンパイラにあることをコンパイラに伝えます。
私はTSがこれを 'Promise'のように扱っていると思います。つまり、あなたが入力してからすでにpolyfillがあると仮定します。 'Number.isInteger'は多面的にポリ充てんされていますが、ポリフィルはTSがしたいことではありません。たとえば、[polyfillsについてのこのコメント](https://github.com/Microsoft/TypeScript/issues/4031#issuecomment-125712496)を参照してください。 –
これが当てはまる場合、IDEが私の目標とするECMAScriptバージョンと私のコードとの非互換性を警告するならばいいでしょう。私はNumber.isInteger()を使用し始めました。なぜなら、Visual Studioはそれを私に提供していて、多くの(比較的近代的な)ブラウザがそれをサポートしていないことを後に発見したからです。他の "地雷"が待っているかどうかは分かりません! – JoshMB
おそらく、あなたがブラウザを知っているまで、欠落している可能性がある多くのものをポリフィルする[es6-shim](https://github.com/paulmillr/es6-shim)のようなものを使用することをお勧めしますターゲティングはすべての機能をサポートします。 –