From be1f89271cf954d37a62edca0942bd08528abbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 16 Apr 2024 01:48:04 +0200 Subject: [PATCH] Fix declaration emit of divergent accessors in JS classes (#58172) --- src/compiler/checker.ts | 2 +- .../declarationEmitClassAccessorsJs1.js | 34 +++++++++++++++++++ .../declarationEmitClassAccessorsJs1.symbols | 26 ++++++++++++++ .../declarationEmitClassAccessorsJs1.types | 32 +++++++++++++++++ .../declarationEmitClassAccessorsJs1.ts | 22 ++++++++++++ 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/declarationEmitClassAccessorsJs1.js create mode 100644 tests/baselines/reference/declarationEmitClassAccessorsJs1.symbols create mode 100644 tests/baselines/reference/declarationEmitClassAccessorsJs1.types create mode 100644 tests/cases/compiler/declarationEmitClassAccessorsJs1.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 67046e27d2d..d0a28439899 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9853,7 +9853,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { /*dotDotDotToken*/ undefined, paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value", /*questionToken*/ undefined, - isPrivate ? undefined : serializeTypeForDeclaration(context, /*declaration*/ undefined, getTypeOfSymbol(p), p), + isPrivate ? undefined : serializeTypeForDeclaration(context, /*declaration*/ undefined, getWriteTypeOfSymbol(p), p), )], /*body*/ undefined, ), diff --git a/tests/baselines/reference/declarationEmitClassAccessorsJs1.js b/tests/baselines/reference/declarationEmitClassAccessorsJs1.js new file mode 100644 index 00000000000..1fd71ea898b --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassAccessorsJs1.js @@ -0,0 +1,34 @@ +//// [tests/cases/compiler/declarationEmitClassAccessorsJs1.ts] //// + +//// [index.js] +// https://github.com/microsoft/TypeScript/issues/58167 + +export class VFile { + /** + * @returns {string} + */ + get path() { + return '' + } + + /** + * @param {URL | string} path + */ + set path(path) { + } +} + + + + +//// [index.d.ts] +export class VFile { + /** + * @param {URL | string} path + */ + set path(path: string | URL); + /** + * @returns {string} + */ + get path(): string; +} diff --git a/tests/baselines/reference/declarationEmitClassAccessorsJs1.symbols b/tests/baselines/reference/declarationEmitClassAccessorsJs1.symbols new file mode 100644 index 00000000000..6f000ff2253 --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassAccessorsJs1.symbols @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/declarationEmitClassAccessorsJs1.ts] //// + +=== index.js === +// https://github.com/microsoft/TypeScript/issues/58167 + +export class VFile { +>VFile : Symbol(VFile, Decl(index.js, 0, 0)) + + /** + * @returns {string} + */ + get path() { +>path : Symbol(VFile.path, Decl(index.js, 2, 20), Decl(index.js, 8, 3)) + + return '' + } + + /** + * @param {URL | string} path + */ + set path(path) { +>path : Symbol(VFile.path, Decl(index.js, 2, 20), Decl(index.js, 8, 3)) +>path : Symbol(path, Decl(index.js, 13, 11)) + } +} + diff --git a/tests/baselines/reference/declarationEmitClassAccessorsJs1.types b/tests/baselines/reference/declarationEmitClassAccessorsJs1.types new file mode 100644 index 00000000000..8634affec5c --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassAccessorsJs1.types @@ -0,0 +1,32 @@ +//// [tests/cases/compiler/declarationEmitClassAccessorsJs1.ts] //// + +=== index.js === +// https://github.com/microsoft/TypeScript/issues/58167 + +export class VFile { +>VFile : VFile +> : ^^^^^ + + /** + * @returns {string} + */ + get path() { +>path : string +> : ^^^^^^ + + return '' +>'' : "" +> : ^^ + } + + /** + * @param {URL | string} path + */ + set path(path) { +>path : string +> : ^^^^^^ +>path : string | URL +> : ^^^^^^^^^^^^ + } +} + diff --git a/tests/cases/compiler/declarationEmitClassAccessorsJs1.ts b/tests/cases/compiler/declarationEmitClassAccessorsJs1.ts new file mode 100644 index 00000000000..91e5b333a9b --- /dev/null +++ b/tests/cases/compiler/declarationEmitClassAccessorsJs1.ts @@ -0,0 +1,22 @@ +// @strict: true +// @checkJs: true +// @declaration: true +// @emitDeclarationOnly: true +// @filename: index.js + +// https://github.com/microsoft/TypeScript/issues/58167 + +export class VFile { + /** + * @returns {string} + */ + get path() { + return '' + } + + /** + * @param {URL | string} path + */ + set path(path) { + } +}