Я не знаю, откуда возникла ошибка, но я могу объяснить, что такое T
.
T
здесь является универсальным типом .Это полезно, когда вы хотите ограничить типы, но не слишком сильно.Например, представьте, что у вас есть тип Bag
:
type Bag = {
name: string,
content: Array<number>
}
Вы можете счесть слишком ограничительным вводить цифры в свои сумки, скажем, вы хотите, чтобы в некоторых сумках были строки, а в других - цифры, вызатем изменил бы ваши типы на:
type NumberBag = {
name: string,
content: Array<number>
}
type StringBag = {
name: string,
content: Array<string>
}
Но лучший способ сделать это состоит в том, чтобы иметь ограничения только на то, что вы хотите, вот реальное ограничение, которое мы хотим, это "сумка содержит только один вид вещей"(string
или number
).Вот где универсальные типы полезны:
type Bag<GenericType> = {
name: string,
content: Array<GenericType>
}
Теперь вы можете захотеть быть более конкретным, представьте, что вы хотите, чтобы в сумках были только цифры или строки (как мы делали раньше):
type Bag<GenericType: number | string> = {
name: string,
content: Array<GenericType>
}
Хорошо, теперь представьте, что вы хотите объявить новую сумку:
const firstBag: Bag = {
name: "Integer bag",
content: [1,3,4]
};
Если вы только это сделаете, у вас будет (поток) ошибка, говорящая:
Cannot use `Bag` [1] without 1 type argument.
1: type Bag<GenericType: number | string> =
Аргумент типа, на который он ссылается, является универсальным типом (который определяет, что будет в пакете).
Другими словами, это означает, что " Bag s" не существует " Bag s вещей", и эта "вещь" должна быть определена.Поэтому при создании Bag необходимо указать точный тип Bag, который вы хотите использовать:
const firstBag: Bag<number> = {
name: "Integer bag",
content: [1,3,4]
};
Это работает одинаково для функций и классов, они оба могут параметризоваться универсальным типом.
В вашем случае вам кажется, что у вас есть функция createLogger
с прикрепленным к ней универсальным типом.Этот универсальный тип также ограничен $winstonLevels
(это эквивалент number | string
, который мы имели для сумок).Но я думаю, что не указание типа здесь не должно быть ошибкой типа, у вас есть объявление функции createLogger
?
Код для примера игрушки: здесь .
Редактировать: кстати, какую версию потока вы используете?