microsoft / microsoft/TypeScript

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

未关闭
#62,414 2 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
Bug Domain: check: Control Flow Help Wanted
主要语言
Go
星标
111k
派生
14.3k
平均合并
2 天 4 小时
30 天内合并 PR
132

描述

### 🔎 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.

贡献指南

打开贡献指南

调研方向

从链接的 Playground 复现开始,研究 compiler 对构造函数参数属性的处理,并将其与普通函数参数的自引用检查进行比较。确认生成的 JavaScript 失败,并为 compiler 添加覆盖测试,使构造函数情况报告类似“Parameter 'f' cannot reference itself.”的错误。

由索引模型根据 Issue 内容生成。

评估

技术栈
typescript
领域
compilers
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

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