Skip to content

[transpileDeclaration API][5.5] Self referencing generic type constraint with union gets emitted as unknownΒ #58598

Closed
@MichaelMitchell-at

Description

@MichaelMitchell-at

πŸ”Ž Search Terms

transpiledeclaration type generic constraint unknown self referencing union

πŸ•— Version & Regression Information

5.5.0-dev.20240519

⏯ Playground Link

https://www.typescriptlang.org/dev/bug-workbench/?target=7&ts=5.5.0-dev.20240519&ssl=1&ssc=1&pln=3&pc=1#code/PTAEAEGcBcCcEsDG0Bco4FcCmAoEEATLRAGwENYzp4B7AOzU13ygAsaB3AUQFt5o8YNp179oWAgDF4JLGjIA6AguiQcgiADMZWOmR5zQi1TiwAPAA41Y0UInoxQNAEYArYrYC8oAN45QoJo0NGgAPAAqoObidASQoADKWNARAHygAD6gANoAuqkAFACUaABuNPAEoJ7pPgC+ADQ4dQDcOEA

πŸ’» Code

// @strict: true
// @declaration: true
// @showEmit
// @showEmittedFile: a.d.ts

// @filename: a.ts
export const object = {
  foo: <T extends Set<T> | []>(): void => {},
};

πŸ™ Actual behavior

When using the API, a.d.ts is emitted as

export declare const object: {
    foo: <T extends unknown>() => void;
};

while when using tsc it gets emitted as

export declare const object: {
    foo: <T extends Set<T> | []>() => void;
};

πŸ™‚ Expected behavior

Using the API should emit

export declare const object: {
    foo: <T extends Set<T> | []>() => void;
};

Additional information about the issue

Weird example I know. Trust me that our actual code makes a bit more sense.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: Isolated DeclarationsRelated to the --isolatedDeclarations compiler flagDomain: ts.transpileDeclarationIssues regarding the transpileDeclaration API, which do not reproduce without it

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions