Fixes #25172: [typescript-fetch] support isolated declaration emission

Merged
KA
6d ago
+304-207

Fixes #25172

Description

Generating a typescript-fetch client and emitting declarations with isolatedDeclarations: true fails with eight diagnostics in runtime.ts.

Add the existing inferred types explicitly to BASE_PATH, DefaultConfig, the BaseAPI constructor configuration parameter, the three middleware methods, exists, and mapValues. Update the 25 checked-in runtime samples to match.

Testing

  • Added regression coverage for isolated declaration emission across all 25 runtime samples and middleware subclass return types.
  • Verified eight compiler errors without the fix and successful compilation with it.
  • Ran npm run pretest successfully; the existing npm test lifecycle now invokes the regression test.

PR checklist

  • Read the contribution guidelines.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.
    @TiFu (2017/07) @taxpon (2017/07) @sebastianhaas (2017/07) @kenisteward (2017/07) @Vrolijkx (2017/09) @macjohnny (2018/01) @topce (2018/10) @akehir (2019/07) @petejohansonxo (2019/11) @amakhrov (2020/02) @davidgamero (2022/03) @mkusaka (2022/04) @joscha (2024/10) @KannaKim (2026/07)

Summary by cubic

Fixes #25172 by adding explicit type annotations to the typescript-fetch runtime template so generated clients compile with isolatedDeclarations: true.

BASE_PATH, DefaultConfig, the BaseAPI constructor parameter, the three middleware methods, exists, and mapValues now have explicit types. Middleware methods keep their generic return type, so subclasses preserve their API type when adding middleware. Generated JavaScript and declaration output is unchanged, and the 25 check-in runtime samples are updated to match.