Я что-то упустил из-за дженериков в машинописи.Предположим, что следующий пример:
type Caster<T> = (original: unknown) => T
const castA = <T>(original) => original as T
// ^^^ Parameter 'original' implicitly has an 'any' type.
const castB: Caster = <T>(original) => original as T
// ^^^ Generic type 'Caster' requires 1 type argument(s).
const castC: Caster<T> = (original) => original as T
// ^^^ Cannot find name 'T'. ^^^
castA
, castB
и castC
делают одно и то же: они приводят значение к типу T
(некрасиво, но соответствует примеру).
Тип Caster<T>
описывает приложение unknown -> T
.Я предполагаю, что могу создать общие реализации такой функции, однако либо castA
, castB
и castC
приводят к ошибкам компиляции (см. Комментарии).
Вместо этого очень хорошо работают следующие элементы:
// OK - but it's not generic
const castString: Caster<string> = (original: unknown) => original as string
// OK - but no reference to generic "Caster" type
const castGeneric = <T>(original: unknown) => original as T
Мне кажется немного неясным.Как я могу получить это поведение?Это было бы очень полезно (подумайте о фабричных методах)
Спасибо