Microsoft/TypeScript

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

Open

#62,414 建立於 2025年9月8日

在 GitHub 查看
 (2 留言) (1 反應) (0 負責人)TypeScript (6,726 fork)batch import
BugDomain: check: Control FlowHelp Wanted

倉庫指標

Star
 (48,455 star)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 9 個 PR)

描述

🔎 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

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.

貢獻者指南