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

时间:2020-09-10 12:11:06

标签: 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
    }   
}

但未显示如何在类级别移动集合并保持其类型。

只需要提示正确的方向即可。

1 个答案:

答案 0 :(得分:1)

您想要的是创建类generic,然后限制您的类方法使用该通用类型。

export const initialState = {
  ids: [],
  basket: [],
};

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "ADD_TO_BASKET":
      if (state.ids.indexOf(action.item.id) === -1) {
        ...
      } else {
        ...

        const basketsShallowCopy = [...state.basket];
        const basketToUpdate = basketsShallowCopy.pop();
        const updatedBasked = {
          ...baskedToUpdate,
          quantity: basketToUpdate.quantity + 1,
        };

        basketsShallowCopy.push(updatedBasked);
        return {
          ...state,
          basket: basketsShallowCopy,
        };
      }
    ...
  }
};

使用该类时,您可以指定要使用的类型

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