Skip to content
This repository has been archived by the owner on Feb 26, 2024. It is now read-only.

Generate literal types for initialized constants #784

Open
jermowery opened this issue Oct 1, 2018 · 2 comments
Open

Generate literal types for initialized constants #784

jermowery opened this issue Oct 1, 2018 · 2 comments

Comments

@jermowery
Copy link
Contributor

Have clutz generate out strict types for @const annotated fields.

For example:

/** @public {string} @const */
Foo.BAR = "baz";`

Should become:

static readonly BAR: 'baz'

in the generated declarations instead of the current behavior of:

static readonly BAR: string

This can help with type inferencing and the creation of string union types

@mprobst mprobst changed the title Strictly type @const Generate literal types for initialized constants Oct 2, 2018
@mprobst
Copy link
Contributor

mprobst commented Oct 2, 2018

I think the term is literal types.

I'm not sure this is a good idea though. Closure Compiler has no concept of literal types, there is no type 'baz' for Closure Compiler. If we'd try to be clever and invent them, we're prone to break other guarantees in the system, e.g. subtyping when such fields are involved. Generally speaking I think we should only produce .d.ts that map Closure's type system into TS, without trying to add precision/fanciness that doesn't exist in Closure.

/CC @rkirov might have an opinion.

@Goodwine
Copy link
Contributor

Goodwine commented Oct 2, 2018

I looked briefly at changing this behavior, it requires using Node rather than JsType, but the function that emits the type is used in several places which will need to be updated, as well as their callers, there are many cascading things 😕

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants