How do I express this in Typescript?

前端 未结 3 1607

Let\'s say I have an interface A:

interface A {
  foo: number
  bar: string
}

And I have a generic type Option:

3条回答
  •  孤独总比滥情好
    2021-02-19 04:53

    I haven't looked at TypeScript for a while (I think it was around version 1.0), so I can't really tell if it's there now.

    What you want requires a type system feature called higher kinded types ; it allows one to construct types by passing them as arguments to type constructors, very much like function application, lifted to the type level.

    You'll have to adjust A's definition in order to make this work. Here's how I'd achieve what you want in Haskell :

    -- First, I need a more general definition for A
    data GeneralizedA f = A { foo :: f Int, bar :: f String }
    
    -- So that I can re-encode the original A like this :
    type A = GeneralizedA Identity
    
    -- Guessing what the Option type would be since
    -- Haskell's type system is more precise here :
    data Option a = Option { optionMap :: IO a }
    
    -- And here's the result :
    type B = GeneralizedA Option
    

提交回复
热议问题