在打字稿中将动态类型定义为数组

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