2016-03-29 18 views
1

活字体の規約活字体で

let a = true; 

let b: boolean = true; 

trueはすでにブール値ですので示したように、(まだ変数の型として定義するのが一般的ですb)について?

もしそうなら、すべてのプリミティブ型について同じですか?

答えて

1

活字体タイプ変数。異なるタイプ割り当てるとき

let a = true;   // implicitly typed as boolean 
let b: boolean = true; // explicitly typed as boolean 

の両方がエラーになります::だから二つの変数は、ここでは、両方のbooleanとして入力されますが、明示的または暗黙的であるべきかどうかのための規則はあり

a = "a string";  // error, type 'string' is not assignable to type 'boolean' 
b = "a string";  // error, type 'string' is not assignable to type 'boolean' 

ませんが、私は非常だろうlet a: boolean = true;という冗長性を削除することを推奨します。代わりにlet a = true;と書くのは簡単です。割り当てにはすでにタイプが明示されているため、明示的に指定する必要はありません。

暗黙Anys

あなたは "暗黙の任意の種類" に気を付ける必要があります。これは何の割り当ては、初期の文と指定されていないタイプに存在しない場合に発生します。どのような方法で使用することができ

let a; // implicitly typed as `any` 

この変数は:この場合

a = true;  // ok 
a = "a string"; // ok 

、あなたはタイプについて、明示的でなければなりません:

let a: boolean; 
a = true;  // ok 
a = "a string"; // error, type 'string' is not assignable to type 'boolean' -- good! 

あなたは完全にあなたは、Dコンパイルエラーが発生しますコンパイラオプション--noImplicitAny、オンにすることによって暗黙のいずれかのタイプを定義誤って回避することができますそうです。これを有効にすることをお勧めします。

let a; // compile error with `--noImplicitAny` 
+0

実際にTypeScriptが最初の割り当てに基づいて暗黙的に変数をタイプすることを示すソースがありますか?私が見つけることができなかったので: –

+0

@osiはい、[ここ](http://www.typescriptlang.org/docs/type-in​​ference.html)を見てください。 –

+1

@osiまた、コードをテストすることもできます。タイプ推論が考慮されていないため、現在選択されている回答の内容は間違っています。 –

2

実際、最初のアプローチでは、タイプ(TypeScript用)を定義しないので、値としてa変数に任意の値を入れることができます。 JavaScriptは動的であることを忘れないでください。さらに、コンパイル時に、変数の使用時に正しいタイプが提供されているかどうかをチェックすることはできません。あなたはこの可能性があり

:メソッドのパラメータとして使用する場合に影響を受けるとき:第二のアプローチでは

let a = true; 
a = 'test'; 

を、あなたはbの種類が期待されているまさにであることをコンパイル時にチェックすることができます変数の別のプロパティ...

静的検査のためのタイプタイプの厳密な型付けを活用する方が良いでしょう。これにより、実装段階で(実行時ではなく)潜在的な問題を簡単に検出できます。例えば

:初期割り当て(Read more)に基づいて、暗黙

let a:boolean = true; 
a = 'test'; // compilation error 
関連する問題