microsoft / microsoft/TypeScript
Cannot assign generic type aliases that should be equivalent.
Offen
@weswigham arbeitet bereits daran.
Seit 01.9.2020.
Bug
Domain: check: Variance Relationships
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
Cannot assign generic type aliases that should be equivalent.
Simple test case:
export type Example<TData>
= (data: TData | null | undefined) => string | null;
function foo<T>()
{
let x: Example<T> = undefined!;
let y: Example<T | null | undefined> = undefined!;
y = x;
let x1: (data: T | null | undefined) => string | null = undefined!;
let y1: (data: (T | null | undefined) | null | undefined) => string | null = undefined!;
y1 = x1
}
Note that 'x' is not assignable to 'y' with strictNullChecks on. It results in the error:
Type 'Example<T>' is not assignable to type 'Example<T | null | undefined>'.
Type 'T | null | undefined' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'T | null | undefined'.
Type 'undefined' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'undefined'.(2322)
This seems very strange though. Example is just a type alias, which shouldn't have an impact on assignability. If we simply expand the type alias, we get the x1/y1 case. In the expanded form the compiler allows this just fine.
Note: this was working in 3.3. It does not seem to work on 4.0. I'm not sure at what point it may have broken.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.