microsoft / microsoft/TypeScript

rewriteRelativeImportExtensions: tsc doesn't rewrite extensions in emitted declaration files

Open
#61,037 9 comments 3 reactions 0 assignees View on GitHub
Experience Enhancement Help Wanted Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

### 🔎 Search Terms

"rewriteRelativeImportExtensions", "extensions", "declaration", ".d.ts"

### 🕗 Version & Regression Information

- This is the behavior in every version I tried (even in the next 5.8.0), and I reviewed the FAQ for entries about "rewriteRelativeImportExtensions"

### ⏯ Playground Link

_No response_

### 💻 Code

In an index.ts file:
```ts
export * from './file.ts';
```
then build it with `tsc` and `"rewriteRelativeImportExtensions": true` & `"declaration": true` in the `compilerOptions` of your `tsconfig.json`

### 🙁 Actual behavior

Built files content:
In the JS file, `index.js`, the extension is rewritten to .js:
```ts
export * from './file.js';
```
In the declaration file, `index.d.ts`, the extension is not rewritten to .js:
```ts
export * from './file.ts';
```

### 🙂 Expected behavior

In the declaration file, the extension should be rewritten to .js too:
```ts
export * from './file.js';
```

### Additional information about the issue

It occurs in the current TS 5.7.3 and in the next version (5.8.0-dev.20250123 at this time). Even if TS correctly interprets `.d.ts` files with `.ts` extensions in `import`/`export`, it's not the case of the IDE I use, PhpStorm. It can't provide a real code assistance with these declaration files.
In fact, I don't really know if it's a feature, a bug or an oversight in `tsc`, or if `rewriteRelativeImportExtensions` is just too new to be completely supported by all IDEs! Let me know!

Contributor guide

Open the contributing guide

Research direction

Reproduce the issue with index.ts and a tsconfig.json enabling rewriteRelativeImportExtensions and declaration, then trace tsc's declaration emit path for this option. Done means the emitted .d.ts rewrites './file.ts' to './file.js' consistently with the JavaScript output, with coverage for the reported case.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.