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
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
- Start a plain new project
- "@typescript/native-preview": "7.0.0-dev.20260617.2",
- "typescript": "6.0.3"
- Run
npx tsgo --initto get the default tsconfig. Turn on these flags as well.- "allowJs": true,
- "checkJs": true,
- "stableTypeOrdering": true,
- Add the below files. Run
npx tsc&npx tsgoto 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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- 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