Разница между необязательным типом TypeScript и типом | не определено - PullRequest
0 голосов
/ 19 ноября 2018

Я изо всех сил пытаюсь понять разницу между полем, определенным как string | undefined и string?

В нашем текущем коде используются определения типа, подобные этому:

class Foo {
  public bar: string | undefined;
}

При запускеэтот код через TSLint он примет к сведению и пожалуется на это:

Рассмотрите возможность использования '?'синтаксис для объявления этого свойства вместо «undefined» в его типе.

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

class Foo {
  public bar?: string;
}

Итак, как мы сейчас используем тип string | undefined в проверках, подобных этой:

if (foo.bar) {..} Изменится ли это?

Кажется, документация о машинописиуглубленно рассказывает о необязательных типах, но не о том, как это ведет себя в контексте класса.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

bar?: string является необязательным свойством, тогда как bar: string | undefined является обязательным:

interface Foo { 
    prop?: string
}

interface Foo2 {
    prop: string | undefined
}

const foo: Foo = {} // ok
const foo2: Foo2 = {} // error

По этому делу:

if (foo.bar) {..}

Оба подхода хороши (включая то, что Intellisense работает в любом случае).

0 голосов
/ 19 ноября 2018

bar: string | undefined: свойство должно быть объявлено и может быть либо строкой, либо undefined.

bar?: string: свойство может быть не объявлено;если объявлено, см. ранее.

...