[解決済み] Typescript のプリミティブ型:"number" と "Number" の違い(TSC は大文字と小文字を区別しない)?
質問
のパラメータを書きたいのですが
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には
プリミティブ
型 (数値、文字列など) と
オブジェクト
型(Number, String, etc., これらは実行時に明示される)がある。TypeScriptの型
number
と
Number
はそれぞれそれらを参照します。JavaScriptは通常、オブジェクトの型をそのプリミティブな等価物に強制するか、またはその逆を行います。
var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
TypeScriptの型システムのルールでは、このような対処がなされています(仕様書3.7項)。
サブタイプ、スーパータイプ、および代入の互換性を判断するために サブタイプ、スーパータイプ、割り当ての互換性を決定するために、Number、Boolean、Stringのプリミティブ型は、同じプロパティを持つオブジェクト型として扱われます。 と同じプロパティを持つオブジェクト型として扱われます。 それぞれ 'Number', 'Boolean', 'String' インターフェースと同じプロパティを持つオブジェクト型として扱われます。
関連
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] "require(x)" と "import x" の違いについて
-
[解決済み] String型とstring型の違いは何ですか?
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み】JSON-ObjectでTypeScriptオブジェクトを初期化する方法は?
-
[解決済み] TypeScriptの「extends」と「implements」の違いとは?
-
[解決済み] TypeScriptのタイプアサーションと新しい演算子であるas`の違いは何ですか?
-
[解決済み] ts ES5/ES3の非同期関数やメソッドには、「Promise」コンストラクタが必要です。
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptの予約語 "type "とは何ですか?
-
[解決済み] describe'という名前が見つかりません。テストランナー用の型定義をインストールする必要がありますか?
-
[解決済み] ts ES5/ES3の非同期関数やメソッドには、「Promise」コンストラクタが必要です。
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] ユニオン型からインターセクション型への変換
-
[解決済み] 文字列ユニオンから文字列配列へ
-
[解決済み] tsc が `TS2307: Cannot find module` for a local file をスローします。
-
[解決済み] tsconfig.jsonのtargetは何のためにあるのですか?
-
[解決済み] Visual Studio Code - インポート引用符の設定を調整する
-
[解決済み] グローバルスコープの拡張は、外部モジュールまたはアンビエントモジュール宣言にのみ直接ネストすることができます(2669)