2017-07-31 3 views
1

JS ++の静的型付けに関して、型として外部宣言を使用できないのはなぜですか?たとえば:外部宣言を型として使用できないのはなぜですか?

external Uint8Array; 

class ByteArray 
{ 
    Uint8Array[] composingArrays; 
} 

JS ++コンパイラは、Uint8Arrayは「ここ」を使用してタイプを期待することができないことerroring終了します。何か案は?

答えて

1

JavaScriptの種類をJS ++の型として使用することはできません。 JS ++で

external typeの概念は(時々統一外部タイプと呼ばれる)は、すべてのJavaScriptのタイプはコンパイル時に1種類として扱われることを意味します。 (一種externalタイプである。実行時に、externalをアンラップし、実行時に任意のJavaScriptタイプであってもよい。)

JS ++型システムは、基本的に(一つの外部種類に統一)外部のタイプであり、内部型(すべてのJS ++型、プリミティブ型、配列、クラスによるユーザー定義型など)、およびそれらの間の変換が含まれます。あなたのコードを書くための

一つの正しい方法は次のようになります。外部のタイプに何かを宣言することができ文の

external Uint8Array; 

class ByteArray 
{ 
    var composingArrays; 

    ByteArray(int size) { 
     this.composingArrays = new Uint8Array(size); 
    } 
} 

例として:

  • external - JavaScriptライブラリをインポートするために使用
  • var - 外部型の変数を宣言するために使用
  • functionからexternalを入力したUint8Arrayので、外部タイプ

で値を返す関数を宣言するために使用は、あなたが一致(またはそれらの間の可能な変換を持っている)するタイプを必要としています。 varはタイプがexternalで、インスタンス化されたUint8Arrayはタイプがexternalであるため、型が一致します。

さらに高度な使い方では、どのタイプのタイプがスタティックexternalタイプとランタイムUint8Arrayタイプから利用可能かを調べることができます。

+0

したがって、 'var'は単に' external'エイリアスです。私は「自動」なことも役に立つと思う。 – Hydro

+0

私はそれをエイリアスと呼んでいませんが、これは新しい別個の質問の話題のように聞こえます。 –

+0

そうです、私は声明を意味しました。 – Hydro

関連する問題