Ну потому что extend - это "расширение", и главное совместимость, м?
В данном случае любой
UserInfo
обратно совместим с
BaseUserInfo
, т.к. для
BaseUserInfo.getState()
возвращаемое значение имеет тип
void
(не путать с
undefined
), который никак не может быть использован (сам ts
не даст).
abstract class BaseUserInfo {
abstract getState(): void;
}
class UserInfo extends BaseUserInfo {
override getState = (): number => 1;
}
function useInfo(info: BaseUserInfo) {
// An expression of type 'void' cannot be tested for truthiness.(1345)
if (info.getState()) { // не получится так сделать и всё сломать
console.log('never')
}
}