Skip to content

Isolated Declarations: SWC fails to infer types for Symbol-keyed accessors #10507

@magic-akari

Description

@magic-akari

Describe the bug

TypeScript Playground:
https://www.typescriptlang.org/play/?isolatedDeclarations=true&emitDeclarationOnly=true&lib=lib.esnext.d.ts&ts=#code/PTAEAEEsGcHsBsCGAXApgEwCKoMZIE4qSwB20AXKMvgK6oBQIEqAtpMtnoocsSQPIl4AT0rU6jMOHiQARpVTQSqAB7J69eKmSgVoALygAREYDcG1QAdY+HTlLQdAM1iwDoAN71QP0AHNtUABtAGVhFlkEADpkWBDqSBI-ABVEPwBdAAoASk9vXwL8bRp8El1zAoBfABp8n2hA0PDI+Bi4hKTUjMyAN0R4OkpHfES-XK8Cgr1DPoHUCt8a+krzeisbOyRoaFAAMVc8goBiaeMzOv9GsIjo2PiRzrSs8YvC4tKqAAsYKJOFn0qFwaOiaN1adw6KSevX6g1Aw1GL0mvmQ32gv1Oszo-1AgMBQA

Input code

// @isolatedDeclarations: true
// @emitDeclarationOnly: true

let x = "";

export const foo = {
    get [Symbol.toStringTag]() {
        return x;
    },
    set [Symbol.toStringTag](value: string) {
        x = value;
    },
};

export class Foo {
    #x = "";
    get [Symbol.toStringTag]() {
        return this.#x;
    }
    set [Symbol.toStringTag](value: string) {
        this.#x = value;
    }
}

Config

Link to the code that reproduces this issue

https://play.swc.rs/?version=1.11.29&code=H4sIAAAAAAAAA8tJLVGoULBVUFKy5uJKrSjILypRSM7PKy5RSMvPB4pXcykAQTpQVXRwZW5Sfo5eSX5wSVFmXnpIYnqshiZUAQgUpZaUFuUpVFiDRWp1wFQxLp1liTmlqVYKxWARZGNArgFLws2pRXJaTmJxsYIb0GkQDcowt5PqypKMzGI9ZZhbyXQq1BA0B3PVcgEA%2FRPXNlYBAAA%3D&config=H4sIAAAAAAAAA02OsQ6DMAxEd74i8tyhQlWHzl069CMiMJWrBCLbSCDEv9cktHSz3%2FnuvFTOwVsauLnFRluSZ0H%2B7UZk7tVPRkDnhNIwJYUsrqfiUc8v1O0CpT7XF9g5TgmZIpo%2F%2FCdiJH3IELxie1cxSXnEElntsRCHdgx4PLaVl4orHEfUUzcb7nwQzIjk%2BXXm1PUDYtHdgeQAAAA%3D

SWC Info output

No response

Expected behavior

export declare const foo: {
    [Symbol.toStringTag]: string;
};
export declare class Foo {
    #private;
    get [Symbol.toStringTag](): string;
    set [Symbol.toStringTag](value: string);
}

Actual behavior


// @isolatedDeclarations: true
// @emitDeclarationOnly: true
export declare const foo: {
    readonly [Symbol.toStringTag];
    [Symbol.toStringTag]: string;
};
export declare class Foo {
    #private;
    get [Symbol.toStringTag]();
    set [Symbol.toStringTag](value: string);
}


==================== Errors ====================
  x TS9009: At least one accessor must have an explicit return type annotation with --isolatedDeclarations.
    ,-[$DIR/tests/fixture/symbol-getter-setter.ts:7:1]
  6 |     export const foo = {
  7 | ,->     get [Symbol.toStringTag]() {
  8 | |           return x;
  9 | `->     },
 10 |         set [Symbol.toStringTag](value: string) {
    `----
  x TS9009: At least one accessor must have an explicit return type annotation with --isolatedDeclarations.
    ,-[$DIR/tests/fixture/symbol-getter-setter.ts:17:1]
 16 |     #x = "";
 17 |     get [Symbol.toStringTag]() {
    :         ^^^^^^^^^^^^^^^^^^^^
 18 |         return this.#x;
    `----


Version

N/A

Additional context

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions