TypeScript版本:3.1.0-dev.201xxxxx
搜索词:override generic
代码:
interface Foo {
method(): T;
}
interface Bar<T extends Node> extends Foo {
method(): T2;
}
class Node {}
class T2 {}
const x: Bar<Node> = () => "hi"; // 这里应该报错,因为Bar的method方法没有返回类型为T2的声明
错误信息:
interface Foo {
method<T>(): T;
}
// Error: Interface 'Bar<T>' incorrectly extends interface 'Foo'.
interface Bar<T extends Node> extends Foo {
method<T2 extends T>(): T2;
}
// Uncommenting this suddenly fixes the error
// interface Foo {
// method<T>(): T;
// }
预期行为: 错误总是出现,或者总是不出现。
实际行为: 部分接口神秘地移除了错误。
**Playground链接:**https://www.typescriptlang.org/play/#src=interface%20Foo%20%7B%0D%0A%20%20%20%20method%3CT%3E()%3A%20T%3B%0D%0A%7D%0D%0A%0D%0Ainterface%20Bar%3CT%20extends%20Node%3E%20extends%20Foo%20%7B%0D%0A%20%20%20%20method%3CT2%20extends%20T%3E()%3A%20T2%3B%0D%0A%7D%0D%0A%0D%0A// Uncommenting this suddenly fixes the error
// interface Foo {
// method(): T;
// }
// interface Bar extends Foo {
// method(): T2;
// }
// class Node {}
// class T2 {}
// const x: Bar = () => "hi"; // 这里应该报错,因为Bar的method方法没有返回类型为T2的声明
1条答案
按热度按时间toiithl61#
我认为这与重载有关。
这里没有错误:
但是,如果只写一次
method
,就会出错。