Интерфейс дженериков машинописного текста, параметр метода и возвращаемый тип метода

у меня есть эта функция

function getCollection<T>(collectionType: T): Collection<T> {
  return new Collection<T>()
}

а в Collection классе у меня есть это

export class Collection<T> {
  public add (item: T) {
    // .. logic
  }
}

У меня есть пользовательский интерфейс, определенный следующим образом

export interface IStudent {

}

и когда я пытаюсь сделать

getCollection(IStudent).add({});

Ошибка

TS2693: 'IStudent' only refers to a type, but is being used as a value here.

Как заставить его принимать общий тип и возвращать строго типизированную коллекцию?

Вы не можете передать такой тип, вы можете либо ограничить функцию с помощью <IStudent>, либо передать переменную, имеющую вид IStudent.

pailhead 17.05.2022 02:57
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
0
1
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Универсальный тип — это параметр тип, а не параметр функции. Вы определяете

function getCollection<T>(): Collection<T> {
  return new Collection<T>()
}

(обратите внимание, что collectionType в любом случае был неиспользуемым параметром), а затем назовите его как

getCollection<IStudent>().add({});

благодарю вас. как мне получить доступ к параметру типа в теле функции, чтобы получить имя типа?

user3833308 17.05.2022 06:49

@ user3833308 Вы не можете. Типы не существуют во время выполнения.

Bergi 17.05.2022 07:28

Спасибо @Берги. Знаете ли вы, насколько надежны аннотации/декораторы? (т.е. новая библиотека должна опираться на них или все же считать их «экспериментальными»?

user3833308 17.05.2022 08:08

Afaik, декораторы машинописных текстов не обновлены до последней версии, и любые транспиляторы, которые могут быть, определенно являются экспериментальными. Я сомневаюсь, что они перестанут работать в какой-то момент, хотя

Bergi 17.05.2022 14:47

Другие вопросы по теме