diff --git a/tsc/internal/transformers/declarations/transform.go b/tsc/internal/transformers/declarations/transform.go index f2bb66a6803cb..93d96761460fb 100644 --- a/tsc/internal/transformers/declarations/transform.go +++ b/tsc/internal/transformers/declarations/transform.go @@ -1791,12 +1791,17 @@ func (tx *DeclarationTransformer) transformTopLevelDeclaration(input *ast.Node) func (tx *DeclarationTransformer) transformTypeAliasDeclaration(input *ast.TypeAliasDeclaration) *ast.Node { tx.needsDeclare = false + t := tx.Visitor().Visit(input.Type) + if t == nil { + // stripInternal can elide an @internal type RHS; fall back like index signatures + t = tx.Factory().NewKeywordTypeNode(ast.KindAnyKeyword) + } return tx.Factory().UpdateTypeAliasDeclaration( input, tx.ensureModifiers(input.AsNode()), input.Name(), tx.Visitor().VisitNodes(input.TypeParameters), - tx.Visitor().Visit(input.Type), + t, ) } diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.js b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.js new file mode 100644 index 0000000000000..42c6d66790d28 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts] //// + +//// [declarationEmitStripInternalTypeAliasRHS.ts] +interface Foo {} +export type T = + /** @internal */ + Foo; + + +//// [declarationEmitStripInternalTypeAliasRHS.js] +export {}; + + +//// [declarationEmitStripInternalTypeAliasRHS.d.ts] +export type T = any; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.symbols b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.symbols new file mode 100644 index 0000000000000..0acbf814f97ab --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.symbols @@ -0,0 +1,13 @@ +//// [tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts] //// + +=== declarationEmitStripInternalTypeAliasRHS.ts === +interface Foo {} +>Foo : Symbol(Foo, Decl(declarationEmitStripInternalTypeAliasRHS.ts, 0, 0)) + +export type T = +>T : Symbol(T, Decl(declarationEmitStripInternalTypeAliasRHS.ts, 0, 16)) + + /** @internal */ + Foo; +>Foo : Symbol(Foo, Decl(declarationEmitStripInternalTypeAliasRHS.ts, 0, 0)) + diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.types b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.types new file mode 100644 index 0000000000000..a048024e07e7b --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStripInternalTypeAliasRHS.types @@ -0,0 +1,10 @@ +//// [tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts] //// + +=== declarationEmitStripInternalTypeAliasRHS.ts === +interface Foo {} +export type T = +>T : Foo + + /** @internal */ + Foo; + diff --git a/tsc/testdata/tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts b/tsc/testdata/tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts new file mode 100644 index 0000000000000..f64b3b8601b67 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/declarationEmitStripInternalTypeAliasRHS.ts @@ -0,0 +1,7 @@ +// @declaration: true +// @stripInternal: true + +interface Foo {} +export type T = + /** @internal */ + Foo;