9

次のコードに関して、2 つの質問があります。

  1. コンパイルすると、「'any[]' を 'Array' に変換できません」という警告/エラーが表示されます。public songPaths: Array = []それは合法的ではないので、私はただ一緒に行くべきpublic songPaths: any = []ですか?

  2. Objectの適切なデフォルト値public song:Object = new Audio()は?

例:

'use strict';

class Boombox{
      constructor(public track: number, public codec: string, public song:Object = new Audio(), public currentTime: number = 0, public playing:bool = false, public titles: any = [], public songPaths: Array = []){
      }
}
4

2 に答える 2

10

型指定されていない配列を宣言するには、次のany[]代わりに使用しArrayます。

public songPaths: any[] = []

可能であれば、次のようにタイプを指定する必要があります。

public songPaths: string[] = []

Objectデフォルト値として使用していません。Objectはタイプでnew Audio()あり、デフォルト値です。可能であれば、タイプは実際に使用したいタイプにする必要があります。

于 2012-10-20T18:24:57.053 に答える
2

'Audio'が実際にメンバーを使用するタイプである場合は、Object'のメンバーしか使用できないため、タイプ'Object'であると宣言しないでください。型が「any」であることを宣言するか、さらに良いことに、型チェックを取得するために使用するメンバーのインターフェース宣言を追加します。例えば:

interface Audio { 
    listen: () => void;
};

function foo(x: Object, y: any, z: Audio) {
    x.listen(); // <-- Error: "The property 'listen' does not exist on type 'Object'"
    y.listen(); // <-- OK
    z.lisen();  // <-- Detects typo due to interface declaration and gives error "The property 'lisen' does not exist on type 'Audio'"
    z.listen(); // <-- Works fine (and gives you intellisense based on declaration).
}
于 2012-10-22T21:25:08.240 に答える