Можно ли написать защиту типа TypeScript, которая проверяет, является ли данный объект пустым?
Я могу сделать противоположное, то есть написать защиту типа, которая проверяет, является ли объект непустым (здесь используется lodash isEmpty ):
isNonEmpty<T>(object: T | {}): object is T {
return !_.isEmpty(object);
}
writeTextIfAny(param: { text: string } | {}): void {
if (isNonEmpty(param)) {
console.log(param.text);
}
}
Однако, когда я пытаюсь все изменить, что-то идет не так:
isEmpty<T>(object: T | {}): object is {} {
return _.isEmpty(object);
}
writeTextIfAny(param: { text: string } | {}): void {
if (!this.isEmpty(param)) {
// param is never, not { text: string }
}
}
Почему это?