给定一个Parent
类,其子级为ChildA
ChildB
abstract class Parent {
abstract foo()
}
class ChildA extends Parent {
foo() { }
bar() { }
}
class ChildB extends Parent {
foo() { }
baz() { }
}
我怎样才能严格地将函数的参数输入为任何类 (类本身,而不是示例),它符合类型Parent
,但本身不是Parent
fn(Parent) // Should fail, is supertype rather than subtype
fn(new ChildA()) // should fail, is instance of subtype rather than class itself
fn(new ChildB()) // should fail, is instance of subtype rather than class itself
fn(ChildA) // Should succeed
fn(ChildB) // Should succeed
1条答案
按热度按时间yhxst69z1#
您可以使用构造签名将
fn
定义如下:这描述了一个构造函数,它创建了一些扩展
Parent
的东西(结构上,在类型系统中)。有趣的是,这非常接近抽象构造签名文档中的示例。传入
Parent
将失败,因为Parent
有一个抽象构造函数:Playground
提到一个即使Parent类不是抽象的也能工作的方法也会有帮助。你需要首先检查给定的类是否是Parent。谢天谢地,这是可能的,因为类型在被示例化之前就被推断出来了:
Playground