タイプnumber
のパラメーターを記述するつもりでしたが、タイプのスペルを間違え、代わりにNumber
を記述しました。
私のIDE(JetBrains WebStorm)では、タイプNumber
は、プリミティブタイプnumber
に使用されるのと同じ色で書き込まれます。クラス(既知または未知)の異なる色を使用しているため、スペルミスタイプを正しい/ほぼ正しい/正しく並べ替えたタイプとして何らかの形で認識していると思います。
コードをコンパイルすると、たとえば、コンパイラがNumber
という名前のクラスを見つけられなかったと文句を言うのではなく、TSCは次のエラーメッセージを書き込みます。
Illegal property access
number
とNumber
の両方が異なるタイプとして共存するということですか?
これが当てはまる場合、これらのクラスの違いはどれですか?
そうでない場合は、未知のクラスに対して表示されるのと同じエラーメッセージを単に記述しなかった理由(「名前 'Number'は現在のスコープに存在しません」)
これはコードです:
class Test
{
private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];
// THIS WORKS
public getValue(index:number):string
{
return this.myArray[index];
}
// THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
public getAnotherValue(index:Number):string
{
return this.myArray[index];
}
}
JavaScriptの概念は、プリミティブタイプ(数値、ストリングなど)およびオブジェクトタイプ(実行時にマニフェストである数値、ストリングなど)です。 TypeScriptタイプnumber
およびNumber
はそれぞれそれらを参照します。 JavaScriptは通常、オブジェクトタイプをそのプリミティブな同等のものに強制します。
var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
TypeScript型システムルールは、次のようにこれを処理します(仕様セクション3.7)。
サブタイプ、スーパータイプ、および割り当ての互換性関係を決定するために、Number、Boolean、およびStringプリミティブタイプは、それぞれ「Number」、「Boolean」、および「String」インターフェースと同じプロパティを持つオブジェクトタイプとして扱われます。
TypeScriptの推奨事項と禁止事項 からのガイダンスでRyanの回答を補強するには:
使用しないでください
Number
、String
、Boolean
、Symbol
、またはObject
これらの型は、JavaScriptコードで適切に使用されることはほとんどない非プリミティブボックスオブジェクトを参照します。/* WRONG */ function reverse(s: String): String;
Doタイプ
number
、string
、boolean
、およびsymbol
を使用します。/* OK */ function reverse(s: string): string;