Скажем, у меня есть интерфейс A
:
interface A {
foo: number
bar: string
}
И у меня есть общий тип Option
:
type Option<T> = {
map: () => T
}
Затем я создаю новый интерфейс B
от A
и Option
:
interface B {
foo: Option<number>
bar: Option<string>
}
Как я могу сделать эту операцию более общей? То есть. API, который я хочу, это:
type B = Lift<A>
Где Lift
автоматически сопоставляет каждый элемент A
с Option
. Обратите внимание, что A
может иметь любое количество членов любого типа.
Как я могу реализовать Lift
? Если это невозможно в TypeScript, у кого-нибудь есть решение Scala/Haskell?