在打字稿中将动态类型定义为数组
Define Dynamic type to array in typescript
我有一个包含数组的 class。
let object=new DynamicARRAY()
object.add(12)
object.add("google") // This should not allowed
let object=new DynamicARRAY()
object.add("google")
object.add(12) // This should not allowed
一旦我设置了类型和数组,它如何维护该数组的类型。
我有这样的东西
class DynamicArray {
add(value:string):Array<number>
add(value:number):Array<string>
add<T>(value:T):Array<T> {
let collection = new Array<T>()
collection.push(value)
return collection
}
}
但没有显示我如何在 class 级别移动集合并保持其类型。
只需要提示正确的方向。
您想要的是让您的 class generic 然后约束您 class 方法使用该通用类型。
class DynamicArray<T> {
add(value:T):Array<T> {
let collection = new Array<T>()
collection.push(value)
return collection
}
}
当使用 class 时,您指定它将持有什么类型
const array = new DynamicArray<string>();
array.add('foo');
array.add(12); // will fail
我能想到的拥有通用入口点的唯一方法是静态 class,它实例化一个通用类型 class。
class TypedArray<T> {
private items: T[] = [];
add(value: T): this {
this.items.push(value);
return this;
}
}
class DynamicArray {
static add<T>(value:T): TypedArray<T> {
let collection = new TypedArray<T>()
collection.add(value);
return collection
}
}
const array = DynamicArray.add('foo');
array.add('bar');
array.add(12); // fails
我有一个包含数组的 class。
let object=new DynamicARRAY()
object.add(12)
object.add("google") // This should not allowed
let object=new DynamicARRAY()
object.add("google")
object.add(12) // This should not allowed
一旦我设置了类型和数组,它如何维护该数组的类型。
我有这样的东西
class DynamicArray {
add(value:string):Array<number>
add(value:number):Array<string>
add<T>(value:T):Array<T> {
let collection = new Array<T>()
collection.push(value)
return collection
}
}
但没有显示我如何在 class 级别移动集合并保持其类型。
只需要提示正确的方向。
您想要的是让您的 class generic 然后约束您 class 方法使用该通用类型。
class DynamicArray<T> {
add(value:T):Array<T> {
let collection = new Array<T>()
collection.push(value)
return collection
}
}
当使用 class 时,您指定它将持有什么类型
const array = new DynamicArray<string>();
array.add('foo');
array.add(12); // will fail
我能想到的拥有通用入口点的唯一方法是静态 class,它实例化一个通用类型 class。
class TypedArray<T> {
private items: T[] = [];
add(value: T): this {
this.items.push(value);
return this;
}
}
class DynamicArray {
static add<T>(value:T): TypedArray<T> {
let collection = new TypedArray<T>()
collection.add(value);
return collection
}
}
const array = DynamicArray.add('foo');
array.add('bar');
array.add(12); // fails