title: How to get a litteral 'aString' value match a litteral 'aString' type?
body: <p>While converting a project to TypeScript, I reached the following issue.</p>
  
  <p>When I remove the <code>as 'http'</code> casting here :
  <a href="https://github.com/nfroidure/whook/blob/934864ee80cc0505420bff5db8bd4ded167c4f57/packages/whook-example/src/services/API.ts#L49" rel="nofollow noreferrer">https://github.com/nfroidure/whook/blob/934864ee80cc0505420bff5db8bd4ded167c4f57/packages/whook-example/src/services/API.ts#L49</a></p>
  
  <p>I get an error here:
  <a href="https://github.com/nfroidure/whook/blob/934864ee80cc0505420bff5db8bd4ded167c4f57/packages/whook-example/src/services/API.ts#L101" rel="nofollow noreferrer">https://github.com/nfroidure/whook/blob/934864ee80cc0505420bff5db8bd4ded167c4f57/packages/whook-example/src/services/API.ts#L101</a></p>
  
  <p>It looks like the 'http' string is not recognized as an 'http' type ?!
  You can easily live check the problem by running a copy of the project with the following command <code>npm init @whook</code>.</p>
  
  <p>The error:</p>
  
  <pre><code>Argument of type '{ openapi: string; info: { version: string; title: any; description: any; }; servers: { url: string; }[]; components: { securitySchemes: { fakeAuth: { type: "apiKey"; description: string; name: string; in: string; }; bearerAuth: { ...; }; } | { ...; }; }; paths: any; }' is not assignable to parameter of type 'Document'.
    Types of property 'components' are incompatible.
      Type '{ securitySchemes: { fakeAuth: { type: "apiKey"; description: string; name: string; in: string; }; bearerAuth: { type: string; description: string; scheme: string; }; } | { bearerAuth: { type: string; description: string; scheme: string; }; }; }' is not assignable to type 'ComponentsObject'.
        Types of property 'securitySchemes' are incompatible.
          Type '{ fakeAuth: { type: "apiKey"; description: string; name: string; in: string; }; bearerAuth: { type: string; description: string; scheme: string; }; } | { bearerAuth: { type: string; description: string; scheme: string; }; }' is not assignable to type '{ [key: string]: ReferenceObject | HttpSecurityScheme | ApiKeySecurityScheme | OAuth2SecurityScheme | OpenIdSecurityScheme; }'.
            Type '{ fakeAuth: { type: "apiKey"; description: string; name: string; in: string; }; bearerAuth: { type: string; description: string; scheme: string; }; }' is not assignable to type '{ [key: string]: ReferenceObject | HttpSecurityScheme | ApiKeySecurityScheme | OAuth2SecurityScheme | OpenIdSecurityScheme; }'.
              Property 'bearerAuth' is incompatible with index signature.
                Type '{ type: string; description: string; scheme: string; }' is not assignable to type 'ReferenceObject | HttpSecurityScheme | ApiKeySecurityScheme | OAuth2SecurityScheme | OpenIdSecurityScheme'.
                  Type '{ type: string; description: string; scheme: string; }' is not assignable to type 'HttpSecurityScheme'.
                    Types of property 'type' are incompatible.
                      Type 'string' is not assignable to type '"http"'.ts(2345)
  
  </code></pre>