microsoft / microsoft/TypeScript

content-mapper generates inconsistent declaration extensions, making management of package.json#exports hard / verbose

未关闭
#64,053 10 条评论 0 个 reaction 已指派 1 人 已被 @andrewbranch 认领 在 GitHub 查看
Needs Investigation
主要语言
Go
星标
111k
派生
14.3k
平均合并
2 天 4 小时
30 天内合并 PR
132

描述

### 🔎 Search Terms

- `content-mapper`
- `extensions custom declarations`

### 🕗 Version & Regression Information

Using:
```
"typescript": "7.1.0-dev.20260821.1"
```

### ⏯ Playground Link

n/a

### 💻 Code

Here is the repo with the code: https://github.com/NullVoxPopuli/ember-content-mapper/tree/main/examples/cli-library-v2

Image

As you can see, we have 3 different declaration extensions
- `.d.ts`
- `.d.gjs.ts`
- `.d.gts.ts`

Which makes the package.json `exports` mapping hard, because for each file type (which can change as refactoring occurs), I'd have to specify different `types` globs depending on which public entrypoint maps to which file.

It seems no resolving tool (node, rollup, etc) supports _arrays_ of globs for package.json#exports like tsconfig.json#compilerOptions.paths does

### 🙁 Actual behavior

Too many declaration extension types

### 🙂 Expected behavior

I'm compliling to JS (not with tsc), so I don't think the emitted imports, nor the declarations, should have any extension other than `.d.ts` (with the in-declaration imports being extensionless, ofc)

### Additional information about the issue

Somewhat related, but I've battled this quite a bit using TS < 7, and have hacked around it via https://github.com/NullVoxPopuli/fix-bad-declaration-output and https://github.com/embroider-build/embroider/blob/5449eb2944cd13548794ceff97df1d86a8c5d53d/packages/addon-dev/src/rollup-declarations.ts#L127

as far as I know, this is an issue in other ecosystems, like MDX
(and any ecosystem that has a custom syntax, and compiles to JS for library publishing)

Potentially related issues:
- https://github.com/microsoft/TypeScript/issues/61037

Docs I know about:
- https://www.typescriptlang.org/tsconfig/#allowImportingTsExtensions
- https://www.typescriptlang.org/tsconfig/#allowArbitraryExtensions (I think ? (idk actually) this option might be the problem, because it assumes the file isn't transformed for publish)

The full expanded tsconfig
```
{
"compilerOptions": {
"allowJs": true,
"allowImportingTsExtensions": true,
"emitDeclarationOnly": true,
"declaration": true,
"declarationDir": "./declarations",
"declarationMap": true,
"experimentalDecorators": true,
"module": "esnext",
"moduleResolution": "bundler",
"noEmit": false,
"noUncheckedIndexedAccess": true,
"noEmitOnError": false,
"rootDir": "./src",
"skipLibCheck": true,
"strict": true,
"target": "es2024",
"types": [],
"verbatimModuleSyntax": true,
"allowSyntheticDefaultImports": true,
"isolatedModules": true,
"preserveConstEnums": true
},
"files": [
"./src/index.ts",
"./src/template-registry.ts",
"./src/utils/format.ts"
],
"include": [
"./src/**/*"
],
"exclude": [
"/examples/ember-library-v2/declarations"
]
}
```
I've also tried with adding:
`allowArbitraryExtensions: true` and `rewriteRelativeImportExtensions: true`

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。