123

type のパラメーターを書くつもりだったのですが、タイプのスペルを間違えて代わり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]; 
    }
}
4

3 に答える 3

71

JavaScript には、プリミティブ型 (数値、文字列など) とオブジェクト型 (数値、文字列など、実行時に明示される) の概念があります。TypeScript 型numberNumberそれらをそれぞれ参照します。JavaScript は通常、オブジェクト型をプリミティブな同等のものに強制変換します。またはその逆も同様です。

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35

TypeScript の型システム規則は、これを次のように扱います (仕様セクション 3.7)。

サブタイプ、スーパータイプ、割り当ての互換性を判断するために、Number、Boolean、および String プリミティブ型は、それぞれ「Number」、「Boolean」、および「String」インターフェイスと同じプロパティを持つオブジェクト型として扱われます。

于 2013-03-18T22:28:28.077 に答える