考虑一个班级A
:
class A { }
是否可以声明抽象类型B
,并声明A
是B
的子类型,没有更改{{1}的定义}}?即以下应编译:
A
理由:我使用支持类似于Clojure和Elixir协议的系统的语言生成带有Flow注释的JavaScript代码。
答案 0 :(得分:0)
你能使用接口吗?接口使用结构子类型。所以,如果你有
interface B {
someProperty: string;
}
然后,string
属性someProperty
的任何内容都是B
的子类型。
class A {
someProperty: string;
}
// No error
function testClassSubTyping(a: A): B {
return a;
}
class C {}
// Error: property `someProperty` not found in C
function testBadClassSubTyping(c: C): B {
return c;
}