Угловой проект TypeScript: использовать неопределенное или нулевое для свойств в классах? - PullRequest
0 голосов
/ 19 мая 2018

У меня есть проект Angular 6, и мой вопрос в том, каков наилучший способ определения обнуляемого свойства в классе модели?

Опция 1 : используйте оператор ?

export class ProductModel {
    public name?: string;
}

Опция 2 : определить свойство как string и как null

export class ProductModel {
    public name: string | null;
}

Обратите внимание, что IУстановил "strictNullChecks": true в tsconfig.json.

Может быть, это просто предпочтение, но если кто-то может помочь мне предоставить некоторые справочные советы и рекомендации или справочную статью?

1 Ответ

0 голосов
/ 19 мая 2018

При включенном strictNullChecks name?: string; имя относится к типу string | undefined.

Два примера в вопросе имеют не только слегка различный синтаксис, но и дают разные результаты:

type WithOptional = {
    name?: string;
}

type WithNullable = {
    name: string | null;
}

const withOptional: WithOptional = {}; // no error: name is optional 
withOptional.name = null; // error: null is not assignable to string | undefined

const withNullable: WithNullable = {}; // error: name is missing
withNullable.name = undefined // error: undefined is not assingable to string | null

Если вы хотите, чтобы имя было необязательным и могло иметь значение null, вы можете определить его как name?: string | null;

...