我有以下代码:
abstract class Foo<T extends { data: string }> {
abstract doSomething(params: T): void;
}
class Baz extends Foo<{ id: string; data: string }> {
doSomething(params) {}
}
Run Code Online (Sandbox Code Playgroud)
我的期望是,在实现该doSomething
方法时,它会自动推断出params
as T
,但它将其推断为any
。我错了吗?
通过扩展,编译器只是检查派生类是否可分配给基类,您可以自由设计派生类,只要它可分配给基类即可。
想象一下你不扩展,只是写一个普通的类。doSomething(param)
隐含地意味着doSomething(param:any)
. 即使你延伸,这个含义也不会改变。由于(any) => void
可分配给({ id: string; data: string }) => void
,所以一切都很好。编译器不会做额外的工作。
归档时间: |
|
查看次数: |
573 次 |
最近记录: |