microsoft / microsoft/TypeScript

Behavior difference: (jsdoc) comment emit inconsistencies on expando functions

Abierto
#63,836 0 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

Summary as below. Note that the commit emit fix for arrows will be a breaking change from TS 6.

tsc + .js tsc + .ts tsgo + .js tsgo + .ts
ExpandoFunctionInlineNamedExport ✅ Comment ✅ Comment ✅ Comment ✅ Comment
ExpandoArrowInlineNamedExport ❌ Comment ✅ Comment ❌ Comment ❌ Comment
ExpandoFunctionNamedExport ✅ Comment ✅ Comment ✅ Comment ✅ Comment
ExpandoArrowNamedExport ✅ Comment ✅ Comment ❌ Comment ❌ Comment
ExpandoFunctionDefaultExport ✅ Comment ✅ Comment ✅ Comment ✅ Comment
ExpandoArrowDefaultExport ✅ Comment ✅ Comment ❌ Comment ❌ Comment

Steps to reproduce

  1. Start a plain new project
    • "@typescript/native-preview": "7.0.0-dev.20260612.1",
    • "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,
    • "removeComments": false,
  3. Add the below files. Run npx tsc & npx tsgo to see the difference.
    • Emitted type output from using .js and .ts are a bit different as shown above.

src/main.js

/**
 * jsdoc description on `ExpandoFunctionInlineNamedExport`
 */
export function ExpandoFunctionInlineNamedExport() { return null; }
ExpandoFunctionInlineNamedExport.args = { num: 3 };

/**
 * jsdoc description on `ExpandoArrowInlineNamedExport`
 */
export const ExpandoArrowInlineNamedExport = () => { return null; };
ExpandoArrowInlineNamedExport.args = { num: 3 };

/**
 * jsdoc description on `ExpandoFunctionNamedExport`
 */
function ExpandoFunctionNamedExport() { return null; }
ExpandoFunctionNamedExport.args = { num: 3 };

/**
 * jsdoc description on `ExpandoArrowNamedExport`
 */
const ExpandoArrowNamedExport = () => { return null; };
ExpandoArrowNamedExport.args = { num: 3 };

export { ExpandoFunctionNamedExport, ExpandoArrowNamedExport };

src/ExpandoFunctionDefaultExport.js

/**
 * jsdoc description on `ExpandoFunctionDefaultExport`
 */
function ExpandoFunctionDefaultExport() { return null; }
ExpandoFunctionDefaultExport.args = { num: 3 };

export default ExpandoFunctionDefaultExport;

src/ExpandoArrowDefaultExport.js

/**
 * jsdoc description on `ExpandoArrowDefaultExport`
 */
const ExpandoArrowDefaultExport = () => { return null; };
ExpandoArrowDefaultExport.args = { num: 3 };

export default ExpandoArrowDefaultExport;

Behavior with typescript@6.0

Output from using .js.

/**
 * jsdoc description on `ExpandoFunctionInlineNamedExport`
 */
export function ExpandoFunctionInlineNamedExport(): null;
export namespace ExpandoFunctionInlineNamedExport {
    namespace args {
        let num: number;
    }
}
export function ExpandoArrowInlineNamedExport(): null;
export namespace ExpandoArrowInlineNamedExport {
    export namespace args_1 {
        let num_1: number;
        export { num_1 as num };
    }
    export { args_1 as args };
}
/**
 * jsdoc description on `ExpandoFunctionNamedExport`
 */
export function ExpandoFunctionNamedExport(): null;
export namespace ExpandoFunctionNamedExport {
    export namespace args_2 {
        let num_2: number;
        export { num_2 as num };
    }
    export { args_2 as args };
}
/**
 * jsdoc description on `ExpandoArrowNamedExport`
 */
export function ExpandoArrowNamedExport(): null;
export namespace ExpandoArrowNamedExport {
    export namespace args_3 {
        let num_3: number;
        export { num_3 as num };
    }
    export { args_3 as args };
}
//# sourceMappingURL=main.d.ts.map

export default ExpandoFunctionDefaultExport;
/**
 * jsdoc description on `ExpandoFunctionDefaultExport`
 */
declare function ExpandoFunctionDefaultExport(): null;
declare namespace ExpandoFunctionDefaultExport {
    namespace args {
        let num: number;
    }
}
//# sourceMappingURL=ExpandoFunctionDefaultExport.d.ts.map

export default ExpandoArrowDefaultExport;
/**
 * jsdoc description on `ExpandoArrowDefaultExport`
 */
declare function ExpandoArrowDefaultExport(): null;
declare namespace ExpandoArrowDefaultExport {
    namespace args {
        let num: number;
    }
}
//# sourceMappingURL=ExpandoArrowDefaultExport.d.ts.map

Behavior with tsgo

Output from using .js.

/**
 * jsdoc description on `ExpandoFunctionInlineNamedExport`
 */
export declare function ExpandoFunctionInlineNamedExport(): null;
export declare namespace ExpandoFunctionInlineNamedExport {
    var args: {
        num: number;
    };
}
export declare function ExpandoArrowInlineNamedExport(): null;
export declare namespace ExpandoArrowInlineNamedExport {
    var args: {
        num: number;
    };
}
/**
 * jsdoc description on `ExpandoFunctionNamedExport`
 */
declare function ExpandoFunctionNamedExport(): null;
declare namespace ExpandoFunctionNamedExport {
    var args: {
        num: number;
    };
}
declare function ExpandoArrowNamedExport(): null;
declare namespace ExpandoArrowNamedExport {
    var args: {
        num: number;
    };
}
export { ExpandoFunctionNamedExport, ExpandoArrowNamedExport };
//# sourceMappingURL=main.d.ts.map

/**
 * jsdoc description on `ExpandoFunctionDefaultExport`
 */
declare function ExpandoFunctionDefaultExport(): null;
declare namespace ExpandoFunctionDefaultExport {
    var args: {
        num: number;
    };
}
export default ExpandoFunctionDefaultExport;
//# sourceMappingURL=ExpandoFunctionDefaultExport.d.ts.map

declare function ExpandoArrowDefaultExport(): null;
declare namespace ExpandoArrowDefaultExport {
    var args: {
        num: number;
    };
}
export default ExpandoArrowDefaultExport;
//# sourceMappingURL=ExpandoArrowDefaultExport.d.ts.map

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

Empieza con los cuatro archivos fuente de src/ y reproduce la salida de declaraciones usando tsc y tsgo con allowJs, checkJs, stableTypeOrdering y removeComments deshabilitados. Compara la emisión de JSDoc para las exportaciones expando de function y arrow entre exportaciones con nombre y default; se considera terminado cuando las salidas siguen un comportamiento coherente y acordado.

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.