Skip to content

Module/interface augmentation doesn't preserve import for declaration emit #56528

Description

🔎 Search Terms

  • project references
  • module/interface augmentation

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about project references.

⏯ Playground Link

No response

💻 Code

Full reduced test case (contents inlined below): https://github.com/OliverJAsh/ts-project-references-augmentation-bug

package.json:

{
"dependencies": {
"fp-ts": "^2.16.1",
"typescript": "^5.2.2"
}
}

app/tsconfig.json:

{
"compilerOptions": {
"rootDir": "../",
"outDir": "../target",
"composite": true
}
}

app/index.ts:

import*asReadonlyTuplefrom'fp-ts/ReadonlyTuple';exportconstApply=ReadonlyTuple.getApply({concat: a=>a});

demos/tsconfig.json:

{
"compilerOptions": {
"rootDir": "../",
"outDir": "../target"
},
"references": [
{ "path": "../app/tsconfig.json" },
]
}

demos/index.ts:

import{Apply}from"../app/index";Apply;

🙁 Actual behavior

A module in the "app" project imports the file node_modules/fp-ts/lib/ReadonlyTuple.d.ts. This file uses module and interface augmentation. Excerpt:

exportdeclareconstURI='ReadonlyTuple'/** * @category type lambdas * @since 2.5.0 */exporttypeURI=typeofURIdeclare module './HKT'{interfaceURItoKind2<E,A>{readonly[URI]: readonly[A,E]}}

When I later try to reference the "app" project from another project ("demos") using project references, I get a type error because the module/interface augmentation is not being applied:

$ yarn run tsc --build --verbose demos/tsconfig.jsonyarn run v1.22.19warning package.json: No license field
$ /Users/oliver/Code/reduced-test-cases/ts-project-references-augmentation-bug/node_modules/.bin/tsc --build --verbose demos/tsconfig.json[13:49:06] Projects in this build: * app/tsconfig.json * demos/tsconfig.json[13:49:06] Project 'app/tsconfig.json' is out of date because output file 'target/app/tsconfig.tsbuildinfo' does not exist[13:49:06] Building project '/Users/oliver/Code/reduced-test-cases/ts-project-references-augmentation-bug/app/tsconfig.json'...[13:49:06] Project 'demos/tsconfig.json' is out of date because output file 'target/demos/index.js' does not exist[13:49:06] Building project '/Users/oliver/Code/reduced-test-cases/ts-project-references-augmentation-bug/demos/tsconfig.json'...target/app/index.d.ts:1:63 - error TS2344: Type '"ReadonlyTuple"' does not satisfy the constraint 'keyof URItoKind2<any, any>'.1 export declare const Apply: import("fp-ts/lib/Apply").Apply2C<"ReadonlyTuple", unknown>; ~~~~~~~~~~~~~~~Found 1 error.

🙂 Expected behavior

No error. The module/interface augmentation should be applied in the dependant project when it consumes the type declarations of the referenced project.

Additional information about the issue

I am able to workaround the issue by adding an explicit import of fp-ts/ReadonlyTuple in demos/index.ts.

Metadata

Metadata

Labels

Domain: Declaration EmitThe issue relates to the emission of d.ts filesNeeds InvestigationThis issue needs a team member to investigate its status.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions