tsc --build false negative through export star facade project
Needs Investigation
# `tsc --build` false negative through `export *` facade project
## TypeScript Version
`7.0.1-rc`
## Repro
Repo: https://github.com/jasonkuhrt/ts-project-reference-reexport-stale-repro
```sh
git clone https://github.com/jasonkuhrt/ts-project-reference-reexport-stale-repro.git
cd ts-project-reference-reexport-stale-repro
pnpm install
pnpm repro
```
Project layout:
```text
.
├── source/
│ ├── tsconfig.json # composite project
│ └── index.ts # exports Status
├── facade/
│ ├── tsconfig.json # composite project, references ../source
│ └── index.ts # re-exports source
└── consumer/
├── tsconfig.json # composite project, references ../facade
└── index.ts # imports Status through facade
```
Dependency path:
```text
consumer/index.ts -> facade/index.ts -> source/index.ts
```
Relevant source:
```ts
// source/index.ts
export type Status = "old";
```
```ts
// facade/index.ts
export * from "../source/index";
```
```ts
// consumer/index.ts
import type { Status } from "../facade/index";
export const status: "old" = null as unknown as Status;
```
The only compiler option in each project is `composite: true`.
## Actual Behavior
`pnpm repro` first builds with:
```ts
// source/index.ts
export type Status = "old";
```
Then it changes the source project to:
```ts
export type Status = "new";
```
The incremental build incorrectly exits `0`.
The facade declaration remains textually unchanged:
```ts
export * from "../source/index";
```
The consumer declaration remains stale:
```ts
export declare const status: "old";
```
## Expected Behavior
The incremental build should fail like the clean build does:
```text
consumer/index.ts(3,14): error TS2322: Type '"new"' is not assignable to type '"old"'.
```
## Notes
This is not pnpm workspace/package-exports behavior. The repro uses no workspace
packages and no package imports.
[#46153](https://github.com/microsoft/TypeScript/issues/46153) looks related,
but this is a minimal `export *` facade case where the intermediate project emits
stable declaration text while its re-exported public API changes.
1 条评论