Microsoft/TypeScript

Using Parameters in a class member function gets incorrect result while all parameters are optional.

Open

#53,541 创建于 2023年3月27日

在 GitHub 查看
 (3 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
BugDomain: check: Type InferenceHelp Wanted

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

Bug Report

🔎 Search Terms

🕗 Version & Regression Information

5.0.2 and 4.9.5

  • This is a crash
  • This changed between versions ______ and _______
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
  • I was unable to test this on prior versions because _______

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.0.2&ssl=15&ssc=1&pln=16&pc=1#code/FAYwNghgzlAEAqsDexZtgeg7AZgOwAoBKALlgDcB7ASwBMBuVdLXQ2PCAWwFMB+MqABcATtTwBzWKQo0GTNPgLsufASLHiANLCjcAHv3YBXTgCNuwqWSp1kAX2APgoSDFgBZADwANWPsHceLRw8AB8yPKwIJR4QsJGIIKUwkoADkamYNQgsJxkvkT2zuisSgB0FRDC4lBkAApVKgHCUD4A2gDk+B2wALrhhSglJYIAFtRQZZxlirAVZVU1UowlDk44RniJ1DGsAEzlldW1sA3CTRat8G2wXXg9-VIRJXjcAO4IxDNs84twRIw7EA

Playground link with relevant code

💻 Code

class T {
    // fn(): void;
    // fn( name?: string ): void;
    fn( name?: string, sex?: number ): void {}
}


class M<X extends T> {
    constructor( public m: X ) {}

    fn( ...args: Parameters<X['fn' ]> ) {
        this.m.fn( ...args );
    }
}

function fn2( ...args: Parameters<T[ 'fn' ]> ) {
    new T().fn( ...args );
}

🙁 Actual behavior

image

The fn method in class M has similar code with the global function fn2, but it get errors.

The error message disappears if I add function overload ( uncomment line 3 & 4 in playground ).

🙂 Expected behavior

贡献者指南