如果有一些问题,我有数组功能,如:
this._array = [handler, func, type]
我如何宣布这个私有财产:
1. Array<any>
2. any[]
3. T[]
4. Array<T>
此声明有何不同?
还有一些问题:
this._array.push(()=>{ console.log("hey")})
我如何定义类型函数?
答案 0 :(得分:2)
在您的情况下,如果您不知道阵列中哪些类型可以使用any[]
,这是不可取的。我建议你重构你的代码,让数组具有相同的类型。
1) Array<any>
- 接受任何内容。
2) any[]
- 与上一个相同。
console.log([].constructor);
console.log((new Array()).constructor);
&#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)
Array<any>
和any[]
是等效的,是任何内容的数组(不是对项目进行类型检查,如果可以帮助,最好避免这些)T[]
和Array<T>
是等效的,并且是给定类型T
的数组,因此您将获得这些的编译类型检查。如果您需要存储类似[handler, func, type]
的内容:
let arrary: Array<(param:number) => void> = []
使用此版本检查推送的项目是否符合您的处理程序签名。
答案 3 :(得分:0)
您可以使用tuple代替数组,例如:
private _array: [any, () => void, string];