Условные типы и классы Typescript - странное поведение - PullRequest
2 голосов
/ 07 мая 2020
class A {
    x = 1
}

class B {
    x = 1
}

type ThisIsTrue = B extends A ? true : false

Угадайте, что приведенное выше возвращает true, поскольку B назначается A, поскольку оба имеют {x: number}.

Но когда одно и то же поле установлено как частное, типы больше не могут быть назначены!

class C {
    private x = 1
}

class D {
    private x = 1
}

type ThisIsFalse = D extends C ? true : false

Есть ли причина, по которой приведенное выше значение возвращает false?

Но когда класс расширяется C, он снова обрабатывается как назначаемый ...

class E extends C {
}

type ThisIsAgainTrue = E extends C ? true : false

Означает ли это, что, просто добавив частное поле к классу, мы действительно можем включить проверку типа экземпляра для классов?!

type InstanceOf<D, B> = D extends B ? true : false // provided B has a private field

1 Ответ

0 голосов
/ 07 мая 2020

Получил ответ от группы машинописного дискурса. В справочнике есть раздел о совместимости «номинальных» типов при наличии закрытых членов.

https://www.typescriptlang.org/docs/handbook/type-compatibility.html#private -and-protected-members-in-classes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...