9

关于以下代码,我有两个问题:

  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

如果“音频”实际上是您想要使用其成员的类型,则不要将其声明为“对象”类型,因为您只能使用对象的成员。将其声明为“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 回答