microsoft / microsoft/TypeScript

TypeScript fails to detect self-reference issue in "Parameter Properties" of constructors

Open
#62,414 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Bug Domain: check: Control Flow Help Wanted
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

### 🔎 Search Terms

* private property self reference
* private property self reference constructor
* Parameter Properties constructor self reference

### 🕗 Version & Regression Information

- This is reproducible at least between v4.9.5 and nightly -- I have not tried earlier versions

### ⏯ Playground Link

https://www.typescriptlang.org/play/?target=9&module=1&ts=5.9.2#code/JYWwDg9gTgLgBAbzgKwsAdnAhgZzgfQDM4BfOQqCEOAcnQgBMBTALjCxgAsaBuAKD5YARjhhQsAY3gSANrjwBZAJ4BhOThwAhXE0QC4BuAHojcLsDwB3YDJlwJWAK45dFnI9eYA5gAoAlACEfIb2EOiiUI5S0HA+YFDAAG4cuoQsZkpgTBDERHAAvOR+eiEk+oZesQB0NVhQXjjpERheANoAusUIwSGGUEwwjlCY5jhVhD41VXUNfvylAj0GRgBUxqajcAwQTHj08JbQANYANHCcEJZMiUxQS3AgSgBijpg+aRlZOQTEhYRd9xCEzm9xIKyMfDKAlk8jgADkmJY1LCmAAPGBMdAMRSqdRaHQlQyoDDVWr1RpwZroNqdQm9MycCxVXxTGY4EELKESMKiewFODoRHwxHIjT+fjc8IQGRMKoyCC+CRVYnoHw0LA0M40ISa2gSGh+OZwIA

### 💻 Code

```ts
import { join as _f } from 'node:path';

abstract class MyClassBase {

// this will cause issue in g()!
constructor (private f: typeof _f = f) {
}

g (...args: string[]) {
return this.f(...args);
}

/* // this does not work, however
myFun (f: typeof _f = f) {
f();
}*/
}

class NewClass extends MyClassBase {
join (...args: string[]) {
this.g(...args);
}
}

const c = new NewClass();
console.log(c.join('a', 'b', 'c'));
```

### 🙁 Actual behavior

TypeScript compiler does not report any errors.

if you copy transpiled JS file and run that with Node.js, you will see

```
constructor(f = f) {
^

ReferenceError: Cannot access 'f' before initialization
```

### 🙂 Expected behavior

TypeScript clearly shows an error, similar to what would have been seen in regular function parameters

```
Parameter 'f' cannot reference itself.
```

### Additional information about the issue

The issue originated from this -- https://github.com/microsoft/vscode-js-debug-browsers/issues/19, and I just discovered that the issue in the project or TypeScript has never been fixed. If someone at Microsoft could do a favor and ping the maintainer of that repo as well, it will be much appreciated.

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.

Research direction

Start with the linked Playground reproduction and the compiler’s handling of constructor parameter properties, comparing it with regular function-parameter self-reference checks. Confirm the emitted JavaScript failure and add compiler coverage so the constructor case reports an error like “Parameter 'f' cannot reference itself.”

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
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.