microsoft / microsoft/TypeScript

TS4055 when generating declaration for return type that uses type of paramter for protected methods

未关闭
#61,591 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

Bug Domain: Declaration Emit Help Wanted
主要语言
Go
星标
111k
派生
14.3k
平均合并
2 天 4 小时
30 天内合并 PR
132

描述

### 🔎 Search Terms

TS4055 declaration protected return typeof parameter

### 🕗 Version & Regression Information

- This is the behavior in every version I tried, and I reviewed the FAQ for entries about declarations

### ⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.8.3#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgBSgjDRgWAGc4BvAKDjjCJNgE8BBALjiQFcBbAEZoA3PUbNSrAELcKMKMgDmYgL61aoSLDjpeSbGQhI4S4DELEpANUwAbXsAD6AeQDWACnFMrschW5LFjJKABpvSTYAOUx+YG43YFYIdAJIkIpwgEpA9P8AbRhWEhSJXyKYuIBdGnEoc14oEx9ggpapSuAqtQ0taHhsO0wKKnZahjBeQTsEbFNzIJt7R1dPcQm8ylzy-3CGDfLWToSk0sW-MPEctJ3KQuLgUvbo2K7x-fqYRubNinzniqvbridTiAD0YLgaCIUDgABUAMoAFgADABWNHcABKDSacCKJDgTymMzmcRgAAsIAATXREfhQ8D9YC0wbDKgU4ZE2EIKi8CjKCQIABumFQPFecAA5ACjq8pQA6CIQVCGFnzCzpVi2BzOACiUBhXn2ZVaWxuZsy61NHVeJ2SqXOGT2cGuToKBMeqVlnRqdBNn2+Noufx9QLEDFBDAhUMN0HhyJRAHYAMyBTBQV6oWEyrU6xxSonekmzODkqm09D0xnaVCsoYjOCcqjx3lwfmCpgisV4JCS3OHTqK5WqutwCgLPPLfVxqDG-YA-zbS0ug7BOVxe1nX6r4NFfPxC2kD0PJ5a30urLvaOQuEuAAiLhBtHUQA

### 💻 Code

```ts
export interface Properties {
propertyA: number;
propertyB: string;
}

export function getPropertyValue_Ok(
properties: Properties,
propertyName: keyof Properties,
): Properties[typeof propertyName] {
return properties[propertyName];
}

export class A {
public getPropertyValue_Ok(
properties: Properties,
propertyName: keyof Properties,
): Properties[typeof propertyName] {
return properties[propertyName];
}

// error TS4055: Return type of public method from exported class has or is using private name 'propertyName'.
protected getPropertyValue_Error(
properties: Properties,
propertyName: keyof Properties,
): Properties[typeof propertyName] {
return properties[propertyName];
}

// error TS4073: Parameter 'propertyValue' of public method from exported class has or is using private name 'propertyName'.
protected setPropertyValue_Error(
properties: Properties,
propertyName: keyof Properties,
propertyValue: Properties[typeof propertyName],
) {
// TODO
}
}
```

### 🙁 Actual behavior

The protected methods fail to generate declaration with TS4055 or TS4073.

### 🙂 Expected behavior

The protected methods should be able to generate declaration similar to the public method or function.

### Additional information about the issue

I wonder if there's a way to temporarily suppress this error, becuase ts-ignore doesn't seem to work when generating declaration.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从链接的 TypeScript Playground 和提供的声明生成复现开始,重点关注 class A 中的受保护方法以及 TS4055/TS4073 诊断。将它们的行为与公共方法和独立函数进行比较;完成的标准是受保护方法的声明生成能够在没有这些错误的情况下成功完成。

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

评估

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

把新 issue 发到你的邮箱

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