TypeScript版本:3.3.0-dev.20181122
搜索词:
- autocomplete
- autocomplete generic
- generic extends
- autocomplete keyof extends
- autocomplete keyof generic
代码:
type Except<T, K extends keyof T> = Pick<T, { [P in keyof T]: P extends K ? never : P }[keyof T]>;
interface I1 {
foo: string;
}
function F1<T extends I1>(): Except<T, ''> { // error is shown but autocomplete is not provided
//code
return null;
}
预期行为:
在扩展泛型时显示自动补全
实际行为:
即使错误正确显示,对于具有已知类型的右侧的 T extends
也不会显示自动补全。
Playground链接:
https://www.typescriptlang.org/play/index.html#src=type%20Except%3CT%2C%20K%20extends%20keyof%20T%3E%20%3D%20Pick%3CT%2C%20%7B%20%5BP%20in%20keyof%20T%5D%3A%20P%20extends%20K%20%3F%20never%20%3A%20P%20%7D%5Bkeyof%20T%5D%3E%3B%0A%0Ainterface%20I1%20%7B%0A%20%20%20%20foo%3A%20string%3B%0A%7D%0Afunction%20F1%3CT%20extends%20I1%3E()%3A%20Except%3CT%2C%20''%3E%20%7B%0A%20%20%20%20%2F%2Fcode%0A%20%20%20%20return%20null%3B%0A%7D
相关问题:
#16740 - 但这个问题与此不同,因为它是一个 keyof 问题
5条答案
按热度按时间lokaqttq1#
当我扩展泛型时,我感到非常困惑。请查看这个链接,以了解为什么这可能没有实现:https://stackoverflow.com/a/58417200/7731090 。尽管如此,我还是按照你的建议做了一个。
我能理解为什么它不会进行类型检查,因为泛型本身就是通用的。另一方面,它至少应该提供它知道的值。我认为这可以减少一些困惑,而且很好用,但是需要考虑哪些缺点?
nbewdwxp2#
我认为没有任何重大缺点;我认为甚至会有一些好的副作用。
从这个:
到这个:
也将限制Intellisense结果中的噪音。
mm9b1k5b3#
I found another example (more simple).
playground
jgzswidk4#
这里有另一个似乎由相同根本问题引起的示例:
Typescript Playground
rjjhvcjd5#
FWIW
keyof
在通用函数情况下是不必要的。此示例也不提供类型感知的自动完成建议: