* Explicitly typed js assignments: context sensitive
Explicitly typed special assignments should be context sensitive if they
have an explicit type tag. Previously no special assignments were
context sensitive because they are declarations, and in the common,
untyped, case we inspect the right side of the assignment to get the
type of the left side, and inspect the right side of the assignment to
get the type of the left side, etc etc.
Note that some special assignments still return `any` from
checkExpression, so still don't get the right type.
Fixes#25571
* Change prototype property handling+update bselines
* Fix indentation in test
* Update baselines
* Get return type from `@type` tag
This only happens in the checker, where the type is easily accessible.
The syntax-based check in getEffectiveReturnTypeNode as a fast path, and
for other uses that don't want to make a call to getTypeFromTypeNode.
Fixes#25525
* Implement PR suggestions
* Error when type tag isn't callable
* Fix lint
* Added reference test case and diagnostics message
* Adjusted arity checks to account for non-contiguous overloads
* Code cleanup, baseline not yet commited
* Accepted test baselines and minor implementation changes
* Cleaned up baseline tracking the now renamed arity check test
* Add range response when range contains only 2 values
* Added recent baseline
* Refined arity error messages when available overloads can be grouped
* Rolled back code formatting
* WIP cleanup needed in a few edge cases
* Finished adding new more descriptive error messages
* Code cleanup
* Added simplified version of bugfix for #19220
* Rebased onto master
* Removed whitespace after type assertion
* Code review simplifications
* Use correct diagnostic name
* Code review changes and simplification of diagnostic message
* Revert formatting changes
Previously it did not, causing misleading excess property errors. Note
that assignability errors with conditional types are still usually
confusing. This PR doesn't address that.
Also, make sure that exact matches in getSpellingSuggestion are skipped.
Block scoped variables, classes and enums would issue a bogus
use-before-def error in jsdoc because name resolution always adds Value,
even when resolving a type.
Fixes#25097
* Handle intersection types when looking up base types for visibility
* Extract protected constructor check to function and recur on intersections
* Remove unneeded cast
* Introduce truncation into node builder and symbol display part writer
* Change default maxa truncation length to 240
* Fancy truncation + higher hard limit
* get return type from `@type` tags
Previously, getJSDocReturnType did not check the `@type` tag for a type
node that has a return type. Now it does.
* Improve doc comment of getJSDocReturnType
* More type predicates in type guards!
* Update API baselines with new documentation (?!)
* Index signatures contribute properties to unions
This means that in a union like this:
```ts
type T = { foo: number } | { [s: string]: string }
```
`foo` is now a property of `T` with type `number | string`. Previously
it was not.
Two points of interest:
1. A readonly index signature makes the resulting union property readonly.
2. A numeric index signature only contributes number-named properties.
Fixes#21141
* Correctly handle numeric and symbol property names
1. Symbol-named properties don't contribute to unions.
2. Number-named properties should use the numeric index signature type,
if present, and fall back to the string index signature type, not the
other way round.