Preserve `set`-only accessors in declaration emit

未关闭
#58,119 0 条评论 6 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

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

调研方向

从链接的 Playground 开始,复现 same、divergent、readonly 和 writeonly 访问器的声明输出。跟踪 TypeScript 针对对象访问器的声明发出路径,并对比现有的访问器相关测试或基线;当 write-only 访问器在发出的声明中得以保留,同时不改变其他显示的输出时,即表示完成。

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

描述

In Discussion Suggestion

Playground Link

Related to https://github.com/microsoft/TypeScript/issues/58112#issuecomment-2043419380

export let same = {
    set x(value: string) {
    },
    get x(): string {
        throw new Error("Not implemented.")
    },
};

export let divergent = {
    set x(value: string) {
    },
    get x(): number {
        throw new Error("Not implemented.")
    },
};

export let readonly = {
    get x(): string {
        throw new Error("Not implemented.")
    },
};

export let writeonly = {
    set x(value: string) {
    },
};

Current

Notice that in the declaration of writeonly, we don't preserve the accessor at all.

export declare let same: {
    x: string;
};
export declare let divergent: {
    get x(): number;
    set x(value: string);
};
export declare let readonly: {
    readonly x: string;
};
export declare let writeonly: {
    x: string;
};

Expected

If we had a writeonly modifier, I'd argue we could just use that as a parallel to the readonly declaration; however, we do support accessors in declaration emit, and we could emit that in the case of a write-only accessor.

It is technically a breaking change though for consumers of older TypeScript versions, and the only way to opt out would be to declare a no-op get accessor.

export declare let same: {
    x: string;
};
export declare let divergent: {
    get x(): number;
    set x(value: string);
};
export declare let readonly: {
    readonly x: string;
};
export declare let writeonly: {
    set x(): string;
};
主要语言
Go
星标
111k
派生
14.4k
平均合并
1 天 19 小时
30 天内合并 PR
117

贡献指南

打开贡献指南

从这里开始

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

microsoft/TypeScript 的其他 Issue

查看 microsoft/TypeScript 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

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