如何在TypeScript中将参数的默认值设置为空数组?

时间:2012-10-20 18:18:41

标签: typescript

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

  1. 当我编译它时,我收到警告/错误“无法将任何[]'转换为'数组'”。这是因为public songPaths: Array = []不合法,我应该选择public songPaths: any = []吗?

  2. Object的{​​{1}}是否为public song:Object = new Audio()的适当默认值?

  3. 示例:

    '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 = []){
          }
    }
    

2 个答案:

答案 0 :(得分:9)

要声明无类型数组,请使用any[]而不是Array

public songPaths: any[] = []

如果可能,您应该指定类型,例如:

public songPaths: string[] = []

您没有使用Object作为默认值。 Object是类型,new Audio()是默认值。如果可能,类型应该是您要使用的实际类型。

答案 1 :(得分: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).
}