В моем коде я хочу вернуть функцию высокого порядка и передать свой тип аргумента возвращающей функции. Минимальный сокращенный код выглядит следующим образом.
function curry<A, B: A>(a: A): (b: B) => void {
return () => {}
}
curry(123)("123") // expected error but not
Интересно, почему B
не перетекает в возвращающую функцию. Похоже, возвращаемая функция имеет тип (b: any) => void
.
Я знаю, что в этом примере я могу изменить тип, связанный с подписью, такой как (a: A) => (b: A) => void
. Но мой реальный сценарий более сложен и нуждается в фантомном типе в качестве границы, который выглядит как B
выше.
Итак, вопрос в том, для какого типа создается экземпляр B
? Могу ли я сделать поток параметра типа в позицию аргумента возвращаемой функции? Может ли тип в позиции аргумента влиять на вывод типа фактического аргумента?