Skip to content

Commit 0c66314

Browse files
committed
Treat TemplateExpression as possibly discriminant values
1 parent ece33b7 commit 0c66314

4 files changed

+127
-0
lines changed

Diff for: src/compiler/checker.ts

+1
Original file line numberDiff line numberDiff line change
@@ -29289,6 +29289,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2928929289
case SyntaxKind.NumericLiteral:
2929029290
case SyntaxKind.BigIntLiteral:
2929129291
case SyntaxKind.NoSubstitutionTemplateLiteral:
29292+
case SyntaxKind.TemplateExpression:
2929229293
case SyntaxKind.TrueKeyword:
2929329294
case SyntaxKind.FalseKeyword:
2929429295
case SyntaxKind.NullKeyword:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
=== tests/cases/compiler/templateExpressionAsPossiblyDiscriminantValue.ts ===
2+
// repro mentioned in https://github.com/microsoft/TypeScript/issues/53888
3+
4+
type BiomePlainLinkProps = {
5+
>BiomePlainLinkProps : Symbol(BiomePlainLinkProps, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 0, 0))
6+
7+
href: string;
8+
>href : Symbol(href, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 2, 28))
9+
10+
onClick?: (event: string) => void;
11+
>onClick : Symbol(onClick, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 3, 15))
12+
>event : Symbol(event, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 4, 13))
13+
}
14+
15+
type BiomeButtonProps = {
16+
>BiomeButtonProps : Symbol(BiomeButtonProps, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 5, 1))
17+
18+
href?: never;
19+
>href : Symbol(href, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 7, 25))
20+
21+
onClick?: (event: number) => void;
22+
>onClick : Symbol(onClick, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 8, 15))
23+
>event : Symbol(event, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 9, 13))
24+
}
25+
26+
export type ClickableDiscriminatedUnion =
27+
>ClickableDiscriminatedUnion : Symbol(ClickableDiscriminatedUnion, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 10, 1))
28+
29+
| BiomePlainLinkProps
30+
>BiomePlainLinkProps : Symbol(BiomePlainLinkProps, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 0, 0))
31+
32+
| BiomeButtonProps;
33+
>BiomeButtonProps : Symbol(BiomeButtonProps, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 5, 1))
34+
35+
const p3: ClickableDiscriminatedUnion = {
36+
>p3 : Symbol(p3, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 16, 5))
37+
>ClickableDiscriminatedUnion : Symbol(ClickableDiscriminatedUnion, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 10, 1))
38+
39+
href: `2${undefined}332132`,
40+
>href : Symbol(href, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 16, 41))
41+
>undefined : Symbol(undefined)
42+
43+
onClick: (ev) => console.log('@@@@', ev),
44+
>onClick : Symbol(onClick, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 17, 30))
45+
>ev : Symbol(ev, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 18, 12))
46+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
47+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
48+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
49+
>ev : Symbol(ev, Decl(templateExpressionAsPossiblyDiscriminantValue.ts, 18, 12))
50+
}
51+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
=== tests/cases/compiler/templateExpressionAsPossiblyDiscriminantValue.ts ===
2+
// repro mentioned in https://github.com/microsoft/TypeScript/issues/53888
3+
4+
type BiomePlainLinkProps = {
5+
>BiomePlainLinkProps : { href: string; onClick?: ((event: string) => void) | undefined; }
6+
7+
href: string;
8+
>href : string
9+
10+
onClick?: (event: string) => void;
11+
>onClick : ((event: string) => void) | undefined
12+
>event : string
13+
}
14+
15+
type BiomeButtonProps = {
16+
>BiomeButtonProps : { href?: undefined; onClick?: ((event: number) => void) | undefined; }
17+
18+
href?: never;
19+
>href : undefined
20+
21+
onClick?: (event: number) => void;
22+
>onClick : ((event: number) => void) | undefined
23+
>event : number
24+
}
25+
26+
export type ClickableDiscriminatedUnion =
27+
>ClickableDiscriminatedUnion : BiomePlainLinkProps | BiomeButtonProps
28+
29+
| BiomePlainLinkProps
30+
| BiomeButtonProps;
31+
32+
const p3: ClickableDiscriminatedUnion = {
33+
>p3 : ClickableDiscriminatedUnion
34+
>{ href: `2${undefined}332132`, onClick: (ev) => console.log('@@@@', ev),} : { href: string; onClick: (ev: string) => void; }
35+
36+
href: `2${undefined}332132`,
37+
>href : string
38+
>`2${undefined}332132` : string
39+
>undefined : undefined
40+
41+
onClick: (ev) => console.log('@@@@', ev),
42+
>onClick : (ev: string) => void
43+
>(ev) => console.log('@@@@', ev) : (ev: string) => void
44+
>ev : string
45+
>console.log('@@@@', ev) : void
46+
>console.log : (...data: any[]) => void
47+
>console : Console
48+
>log : (...data: any[]) => void
49+
>'@@@@' : "@@@@"
50+
>ev : string
51+
}
52+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
// repro mentioned in https://github.com/microsoft/TypeScript/issues/53888
5+
6+
type BiomePlainLinkProps = {
7+
href: string;
8+
onClick?: (event: string) => void;
9+
}
10+
11+
type BiomeButtonProps = {
12+
href?: never;
13+
onClick?: (event: number) => void;
14+
}
15+
16+
export type ClickableDiscriminatedUnion =
17+
| BiomePlainLinkProps
18+
| BiomeButtonProps;
19+
20+
const p3: ClickableDiscriminatedUnion = {
21+
href: `2${undefined}332132`,
22+
onClick: (ev) => console.log('@@@@', ev),
23+
}

0 commit comments

Comments
 (0)