我有两个类ClassA
和ClassB
如下:
interface IClassA {
functionA: ()=> void
}
class ClassA implements IClassA{
functionA(){
console.log('hello world A')
}
}
interface IClassB {
functionB: ()=> void
}
class ClassB implements IClassB{
functionB() {
console.log('hello world B')
}
}
我还有另一个函数需要使用ClassA
或ClassB
的实例作为参数,如下所示。
function sayHello(object) {
// ...
}
如何根据所使用类的实例键入object
来访问函数functionA
或functionB
?以下代码无效:
function sayHello(object: IClassA | IClassB)
我不想使用泛型any
类型。谢谢。
答案 0 :(得分:1)
您实际上可以使用|
运算符来创建联合类型。如果您的类具有单独的逻辑,则可以在运行类特定的代码之前使用instanceOf
语法检查类。
function sayHello(input: ClassA | ClassB) : string {
if (input instanceof ClassA) {
input.A();
}
}
答案 1 :(得分:1)
您可以在尝试调用对象之前检查其functionA
。
示例(playground):
function sayHello(obj: IClassA | IClassB) {
if ('functionA' in obj) {
obj.functionA()
}
}