TypeScript 版本: master
代码
type OmitKeys<A, B> = {[P in Exclude<keyof A, B>]: A[P]}
interface Foo {
a: number;
b: string;
c: boolean;
}
var c: OmitKeys<Foo, 'c'>;
c.a // goto definition doesn't work
预期行为:
在 c.a
上使用 Goto definition 会带我到 Foo.a
属性
实际行为:
Goto definition 不起作用
8条答案
按热度按时间cfh9epnr1#
在这一点上,编译器实际上无法将关键点追溯到其声明。
Exclude<keyof A, B>
仅返回字面类型列表,然后Map类型生成具有相同名称的属性的新类型。gab6jxml2#
我知道并非所有事情都可能实现,但如果可能的话,您是否可以追踪这个符号的来源信息?
在上面的示例中,我们确实知道
a
符号来自代码中定义位置的keyof Foo
。jjhzyzn03#
条件类型是一个非常强大的功能,但是如果没有定义这个行为,你也无法重命名或重构。
ql3eal8s4#
当它经过字面类型时,很可能就会丢失上下文。我们很乐意讨论如何添加这个功能的提案。
vfwfrxfs5#
看起来似乎可以实现我们正在使用
I["a"]
,因此该属性来自于I.a
?看起来我们可以在这里使getRootSymbols
起作用。@sandersnwlwcrazw6#
这是个角落案例,它不符合我们的预期,但无论如何,你的解决方案很好且简单。
wqlqzqxt7#
为了保持整洁,自动关闭此问题。问题标签表明目前无法采取行动或已经得到解决。
gc0ot86w8#
这是一个关于设置一个指向原始符号的合成符号路径的问题。我不知道getIndexAccessType在处理0阶属性时是否会这样做。如果没有,那么这里就需要进行更改。