arrays - 在 typescript 中将动态类型定义为数组

标签 arrays typescript initialization

我有一个包含数组的类。

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) generic然后限制您的类方法使用该泛型类型。

class DynamicArray<T> {
    add(value:T):Array<T> {
        let collection = new Array<T>()        
        collection.push(value)
        return collection
    }   
}

使用类时,您指定它将保存什么类型

const array = new DynamicArray<string>();
array.add('foo');
array.add(12); // will fail

我能想到的拥有通用入口点的唯一方法是实例化通用类型类的静态类。

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

关于arrays - 在 typescript 中将动态类型定义为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63829407/

相关文章:

node.js - Typescript 不喜欢我的变量名 "⛄",我无法抑制错误

Typescript:省略翻译的属性

c - 在 C 中,变量的多次初始化不会引发错误。为什么?

javascript - 根据数组的属性将数组拆分为不同大小的 block

javascript - TypeScript 可更新和枚举引用

c++ - 是否有用于从另一个不同的 std::array 初始化 std::array 的特定语法?

c++ - 通过传递引用或返回它来初始化结构是更好的风格吗?

arrays - 有时不能分配给数组,有时可以

php - 如何在 php 中组合 2 个关联数组,这样我们就不会在所有情况下覆盖任何重复的条目?

c++ - 数组排序,从高到低