TypeScript 当在先前的参数中提供对象字面量T时,未显示T键的字符串补全,

ct2axkht  于 5个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(48)

Bug报告

🔎 搜索词

不正确的建议

🕗 版本和回归信息

此问题出现在v4.5.4和夜间版本中。(可能在每个版本中都存在)

⏯ Playground链接

带有相关代码的Playground链接

💻 代码

type Methods = {
    [key: string]: (param: {
        apple: 'apple'
    }) => any
}

function testFunc<M extends Methods>(options: {
    methods: M,
    keys: keyof M
}): void {}

testFunc({
    methods: {
        myMethod: (param) => {
            console.log(param.apple)
        }
    },
    keys: 
})

🙁 实际行为

当将鼠标悬停在第18行的"keys"上时,它显示其类型为"myMethod"。当我开始为其值输入时,"myMethod"没有被建议。

🙂 预期行为

在第18行输入值时,应该出现"myMethod"的建议。

yzuktlbb

yzuktlbb1#

有趣的是,这起作用了

type Methods = {
    [key: string]: (param: {
        apple: 'apple'
    }) => any
}

function testFunc<M extends Methods>(options: {
    methods: M,
    keys: keyof M
}): void { }

const obj = {
    myMethod: () => { },
    foo: () => { },
};
testFunc({
    methods: obj,
    keys: "" // <- here
});
iezvtpos

iezvtpos2#

你好!我相信这个问题并不新鲜,我过去也遇到过同样的情况。
在第18行输入值时,应该建议"myMethod"。
实际上,在你输入字符串之前,类型已经变成了string | number,所以你可以在写引号之前触发自动补全功能。

相关问题