Typescript, передающий тип в качестве параметра

#javascript #typescript

#javascript #typescript

Вопрос:

использование Directus SDK. Я пытаюсь выполнить функцию, которая делает это, я просто хочу изменять тип (CollectionsNameChanges) при каждом вызове функции

 const directus = new Directus<CollectionsNameChanges>('https://mysamelink/');
 

Для этого я создал эту функцию

connection.ts

 //here I want to get a new Type, that's why I am passing title as a parameter

export function DirectusConnection(title: any) {
  return new Directus<typeof title>('https://mysamelink/');
}
 

myList.ts

 interface MyTypes {
  id: number;
}

export async function myFunction(){
  type CollectionsNameChanges= {
    //collection name
    nameofCollection: MyTypes;
  };

//here I am calling my function with the type
  const directus = DirectusConnection(<CollectionsNameChanges>);
  const myList = await directus.items('nameofCollection').readMany();

  return myList 
}
 

Но я получаю сообщение об ошибке в typescript, сообщающее мне, что это выражение ожидалось.
здесь:

   const directus = DirectusConnection(<DirectusCollection>);
 

Ответ №1:

Вы должны использовать общий параметр:

 export function DirectusConnection<T>() {
  return new Directus<T>('https://mysamelink/');
}

// or if you want to use a parameter as that generic type
// but `title` isn't being used anywhere in this function
export function DirectusConnection<T>(title: T) {
  return new Directus<T>('https://mysamelink/');
}

// then later:
const directus = DirectusConnection<CollectionsNameChanges>();
 

Документация по обобщениям.

Комментарии:

1. получение типа ‘T’ не удовлетворяет ограничению ‘TypeMap’.(параметр типа) T в DirectusConnection<T>(): Directus<T>

2. попробуйте изменить его на <T расширяет TypeMap> .