Issue title: allow constants for string literals types
 Issue body: ```typescript
const vow = 'will never change';
let promise: vow;
```
 Comments: 
 Comment 0: We can't do this since it would be a breaking change -- `vow` has not previously introduced an entry in the type namespace, so doing so now would mean random types would start getting shadowed.

`typeof vow` should do what you want here (if we made `const`s be of their string literal type  @DanielRosenwasser please confirm?).
 Comment 1: > typeof vow should do what you want here (if we made consts be of their string literal type

in the expression context `typeof vow` gets me `"string"`
in the type expression context it gets me "will never change", but it's a **type** which I cannot assign to a variable
 Comment 2: Like @RyanCavanaugh said, in order to do `typeof vow`, you'd need #5796. That said, I don't know if that PR will go in. The behavior isn't entirely ideal because it's not clear when you want the literal type and not `string`.
 Comment 3: Here is the proposal: https://github.com/Microsoft/TypeScript/issues/6167#issuecomment-171455369
 Comment 4: What about allowing interpolated strings as string literal types.  So:
```
const vow = "will never change";
let promise: `${vow}`;
```
 Comment 5: The issue in the OP should be fixed by https://github.com/Microsoft/TypeScript/pull/10676

Allowing string interpolation, or any form of string manipulation in type positions is not something we are looking to allow.

for this specific example, use `typeof` operator, e.g. `let promise: typeof vow;`  and this should be `"will never change"`.
 Comment 6: @aleksey-bykov do you agree this proposal is covered by #10676 and `typeof`?
 Comment 7: yes, it's solved, please clise
{'source': 'GithubIssues', 'repo_name_with_owner': 'Microsoft/TypeScript', 'issue_id': 122977894, 'repo_stars': 50182.0}