Búsqueda de sitios web

¿Cómo usar los modelos de MobX State Tree como parámetros de función con TypeScript?


Tengo muchas listas en mi aplicación y quiero crear un ayudante para hacer un modelo de lista, pero no puedo entender cómo tiparlo correctamente. ¿Qué debería usar para definir el tipo correcto por modelo y genérico?

const createListInterface = <T>(Model: T) => {
  const initialState = {
    data: types.array(Model),
    isLoading: false,
    isLoadingMore: false,
    isListEnd: false,
  }

  return types.model(initialState)
}

const stateExample = {
  disputesList: createListInterface<Dispute>(DisputeModel),
}

// types

export const DisputeModel = model({
  disputeId: types.number,
  winnerId: types.maybeNull(types.number),
  creatorId: types.number,
  reason: types.string,
  time: types.string,
  status: DisputeStatusEnumModel,
})

export type Dispute = Instance<typeof DisputeModel>

este código lanza un error

TS2345: Argument of type 'T' is not assignable to parameter of type 'IAnyType'.

Necesito usar el tipo aquí para las sugerencias del IDE, sin ello WebStorm me dice que los datos son any[]

Respuesta #1

Puedes especificar que el tipo genérico T extiende IAnyType.

const createListInterface = <T extends IAnyType>(Model: T) => {
  const initialState = {
    data: types.array(Model),
    isLoading: false,
    isLoadingMore: false,
    isListEnd: false
  };

  return types.model(initialState);
};

const stateExample = {
  disputesList: createListInterface(DisputeModel)
};