microsoft / microsoft/TypeScript

Behavior difference: Block comments on `@typedef` structural types are not preserved, if they are imported and reconstructed as inline types in another file

Abierto
#63,839 5 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Possible Improvement
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

A follow-up on https://github.com/microsoft/typescript-go/issues/4235.


Steps to reproduce

  1. Start a plain new project
    • "@typescript/native-preview": "7.0.0-dev.20260617.2",
    • "typescript": "6.0.3"
  2. Run npx tsgo --init to get the default tsconfig. Turn on these flags as well.
    • "allowJs": true,
    • "checkJs": true,
    • "stableTypeOrdering": true,
  3. Add the below files. Run npx tsc & npx tsgo to see the difference.
/** ========> src/lib.js <======== */
/**
 * @typedef {Object} Foo
 * @property {boolean} bool Whether `.bool` is true or not
 */
export class C {
    /** @returns {Foo} */
    getFoo() { return { bool: false }; }

    /**
     * @typedef {Object} Bar
     * @property {boolean} bool Whether `.bool` is true or not
     */
    /** @returns {Bar} */
    getBar() { return { bool: false }; }
}

/** ========> src/mainJs.js <======== */
import { C } from './lib.js';

export class MainJs {
    constructor() {
        this.c = new C();
    };

    getFoo() { return { ...this.c.getFoo() }; }
    getBar() { return { ...this.c.getBar() }; }
}

/** ========> src/mainTs.ts <======== */
import { C } from './lib.js';

export class MainTs {
    constructor(public c: C) {};

    getFoo() { return { ...this.c.getFoo() }; }
    getBar() { return { ...this.c.getBar() }; }
}

Behavior with typescript@6.0

/** ========> dist/mainJs.d.ts <======== */
export class MainJs {
    c: C;
    getFoo(): {
        /**
         * Whether `.bool` is true or not
         */
        bool: boolean;
    };
    getBar(): {
        /**
         * Whether `.bool` is true or not
         */
        bool: boolean;
    };
}
import { C } from './lib.js';

/** ========> dist/mainTs.d.ts <======== */
import { C } from './lib.js';
export declare class MainTs {
    c: C;
    constructor(c: C);
    getFoo(): {
        /**
         * Whether `.bool` is true or not
         */
        bool: boolean;
    };
    getBar(): {
        /**
         * Whether `.bool` is true or not
         */
        bool: boolean;
    };
}

Behavior with tsgo

/** ========> dist/mainJs.d.ts <======== */
import { C } from './lib.js';
export declare class MainJs {
    c: C;
    constructor();
    getFoo(): {
        bool: boolean;
    };
    getBar(): {
        bool: boolean;
    };
}

/** ========> dist/mainTs.d.ts <======== */
import { C } from './lib.js';
export declare class MainTs {
    c: C;
    constructor(c: C);
    getFoo(): {
        bool: boolean;
    };
    getBar(): {
        bool: boolean;
    };
}

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce la diferencia usando src/lib.js, src/mainJs.js y src/mainTs.ts con allowJs, checkJs y stableTypeOrdering habilitados; después, ejecuta npx tsc y npx tsgo. Compara los archivos generados dist/mainJs.d.ts y dist/mainTs.d.ts; la corrección estará completa cuando los tipos inline reconstruidos conserven los comentarios @property en ambas salidas.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
go, javascript, typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.