TypeScript的最佳做法是什么?

时间:2017-09-13 09:55:15

标签: javascript typescript

如果有一些问题,我有数组功能,如:

this._array = [handler, func, type]

我如何宣布这个私有财产:

 1. Array<any>
 2. any[]
 3. T[]
 4. Array<T>

此声明有何不同?

还有一些问题:

this._array.push(()=>{ console.log("hey")})

我如何定义类型函数?

4 个答案:

答案 0 :(得分:2)

在您的情况下,如果您不知道阵列中哪些类型可以使用any[],这是不可取的。我建议你重构你的代码,让数组具有相同的类型。

1) Array<any> - 接受任何内容。

2) any[] - 与上一个相同。

&#13;
&#13;
console.log([].constructor);
console.log((new Array()).constructor);
&#13;
&#13;
&#13;

3) T[]仅包含类型为T的元素。可以在Generic

中使用

4) Array<T>与上述相同。

说你有一个班级

class SomeClass<T> {
   items: Array<T>;
}

const numbers = new SomeClass<number>();
const strings = new SomeClass<string>();

对于数字,项目的类型为number[],对于字符串,它将为string[]。将替换T的类型来自对象创建语句中的<T>

答案 1 :(得分:0)

TypeScript与JavaScript一样,允许您使用值数组。数组类型可以用两种方式之一编写。在第一个中,您使用后跟[]的元素类型来表示该元素类型的数组:

let list: number[] = [1, 2, 3];

第二种方式使用通用数组类型Array<elemType>:

let list: Array<number> = [1, 2, 3];

更多请参阅此处:https://www.typescriptlang.org/docs/handbook/basic-types.html

答案 2 :(得分:0)

  1. Array<any>any[]是等效的,是任何内容的数组(不是对项目进行类型检查,如果可以帮助,最好避免这些)
  2. T[]Array<T>是等效的,并且是给定类型T的数组,因此您将获得这些的编译类型检查。
  3. 如果您需要存储类似[handler, func, type]的内容:

       let arrary: Array<(param:number) => void> = []
    

    使用此版本检查推送的项目是否符合您的处理程序签名。

答案 3 :(得分:0)

您可以使用tuple代替数组,例如:

private _array: [any, () => void, string];