TypeScriptでabstract classをimplmentsするclassである制約の書き方
code:ts
abstract class Foo {
static greetings: string
abstract sayHello: () => void
abstract maybeNotImplementedProperty?: number
}
class BaseClass {
sayHo () {
console.log('ho!')
}
}
class Hoge extends BaseClass implements Foo {
static greetings = 'Hello'
sayHello () {
console.log(Hoge.greetings)
}
}
class Fuga extends BaseClass implements Foo {
static greetings = 'Bonjour'
sayHello () {
console.log(Fuga.greetings)
}
}
// ここで返り値が BaseClass implements Foo であることを保証したい(BaseClass<Foo>は適当に書いた、うそのコード)
function createByFactory(): BaseClass<Foo> {
return new Hoge()
}
let instance: Foo = createByFactory()
instance.sayHo()
instance.sayHello()