是否可以通过通用函数获得有关对象键的智能帮助

金祖国

这是一个基本示例。是否有可能在智能感知中获取密钥?

代码示例

export class Test<K extends string, V> {


    private data: {[P in K]: V} = {} as any;

    addValue (key: K, value: V): this {
        this.data[key] = value;
        return this;
    }

    build (): {[P in K]: V} {
        return this.data;
    }
}

const test = new Test()
    .addValue('A', 123)
    .addValue('B', '111')
    .build();


test. <-- I want `test` to know about keys in `this.data`

好吧...我应该再添加一些文字

提香·切尔尼科娃·德拉戈米尔

您可以执行此操作,但是在每个步骤(即每个addValue调用),您都需要更改对象的类型以添加​​新的键和值。

export class Test<T> {
    private data: T = {} as any;
    addValue<KAdd extends string, VAdd>(key: KAdd, value: VAdd){
        let newThis = this as unknown as Test<Record<KAdd, VAdd>>
        newThis.data[key] = value;
        return newThis as Test<T & Record<KAdd, VAdd>>;
    }

    build (): T {
        return this.data;
    }
}

const test = new Test()
    .addValue('A', 123)
    .addValue('B', '111')
    .build();


test.A // number
test.B // string  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得有关课堂方法的帮助

获得有关Bash保留字的帮助

如何获得有关终端命令的帮助?

如何获得有关命令的特定选项的帮助

是否可以获得有关繁忙的 Alsa 设备的信息?

如何使zsh`run-help`忽略`sudo`并获得有关以下命令的帮助

如何获得有关apt-get的install子命令的帮助?

如何获得有关“ echo”或其他bash命令的帮助?

如何在Windows中获得有关cURL的帮助

LinqPad:如何获得有关用户定义的程序集的帮助?

我想获得有关 Python 中延迟和循环的帮助

如何通过history.pushState获得有关历史更改的通知?

为什么我无法通过Prolog获得有关“拼图游戏”的答案?

通过AoG中的OAuth获得有关Google Actions的用户信息?

我可以使用wifi获得有关速度的一些建议吗?

无论如何,我可以获得有关vkimage的信息吗?

在哪里可以获得有关字体机制的信息?

在哪里可以获得有关Xebium的详细文档?

哪里可以获得有关DM脚本功能的详细文档

否分类:帮助显示此消息。键入!help命令以获取有关命令的更多信息。您也可以输入!help category以获得有关类别的更多信息

在RealmRecyclerView中获得有关项目删除的通知

容易获得有关多元宇宙的警告?

如何获得有关某些StorageReference的子代的信息?

我如何获得有关LoCo团队的更新?

在C中获得有关“ atoi”功能的警告

获得有关C和C ++ for Xcode的书

如何获得有关按钮点击的通知?

通过应用程序见解获得有关Azure功能错误的通知/警报

我可以获得有关 Windows 更新正在做什么的更多信息吗?