microsoft / microsoft/TypeScript

[isolatedDeclarations] Optional parameter properties are unnecessarily disallowed in isolatedDeclarations mode

Open
#61,501 1 comment 2 reactions 1 assignee View on GitHub

@weswigham is already working on this.

Since Mar 28, 2025.

Needs Investigation
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

### 🔎 Search Terms

optional parameter properties, isolated declarations, TS9025: Declaration emit for this parameter requires implicitly adding undefined to its type. This is not supported with --isolatedDeclarations

### 🕗 Version & Regression Information

- This was present since the introduction of isolatedDeclarations in TS5.5

### ⏯ Playground Link

https://www.typescriptlang.org/play/?downlevelIteration=true&importHelpers=true&target=99&module=1&isolatedDeclarations=true&ts=5.8.2&ssl=6&ssc=2&pln=1&pc=1#code/C4TwDgpgBAsghiARhAqgOwCYQGYEs0QZQC8UaArgLbIBOUAPlOZjvoQNwBQokUAchABuEGuix4CRUhWoiunCAA8wAexrAoAYwA2cAM56oAMRUqoAb05RrWlWj3Aa5TcDUAKGhDgY72kFEUAfgAuWARkMVZJABooT29ffxAQ-iERSIlCAEoLAF9OXKA

### 💻 Code

```ts
type MaybeUndefined = number | undefined;
type NeverUndefined = number;

export class Foo {
constructor(readonly x?: MaybeUndefined, readonly y?: NeverUndefined) {}
}
```

### 🙁 Actual behavior

Gives an error:
> Declaration emit for this parameter requires implicitly adding undefined to its type. This is not supported with --isolatedDeclarations.

### 🙂 Expected behavior

It seems like this could be safely supported by just always emitting the class fields with a type of `|undefined` whether that was redundant or not, something like:
```
export declare class Foo {
readonly x?: MaybeUndefined | undefined;
readonly y?: NeverUndefined | undefined;
constructor(x?: MaybeUndefined, y?: NeverUndefined);
}
```

### Additional information about the issue

The workaround of explicitly adding `|undefined` to the parameter property types is not too onerous, but still seems like an unnecessary restriction for `isolatedDeclarations` mode.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.