Почему я не получаю предупреждения о StrictNullChecks в машинописи - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующий код в машинописи:

interface Member {
    name: string,
    age?: number
}

class Person implements Member {
    name: string;
    constructor(name: string ){
        this.name=name;
    }
}

function bar(person: Member) {
    return "Hello, " + person.name + " " + person.age;
}

let person = new Person("John");
console.log(bar(person));

Я должен получить Возможно, объект 'undefined' предупреждение внутри функции бара, когда я объявляю person.age, так как не каждыйЧлен может иметь возраст.

моя конфигурация машинописного текста выглядит следующим образом:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true,
    "strictNullChecks": true,
    "outDir": "./built"
  },
  "include": [
    "./src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

Есть идеи, почему это не работает для меня?Я использую WebStorm Editor!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

strictNullChecks проверяет, что все операции, выполняемые над свойством, приводят к ненулевому значению.Но в функции бара она печатает только person.age независимо от того, является ли он пустым или неопределенным.Если бы вы сказали, что person.age.toString() машинописный текст выдаст ошибку времени компиляции.

0 голосов
/ 12 декабря 2018

Включите "strict": true, в tsconfig.json, чтобы включить это предупреждение.

Или, если вы не хотите использовать все строгие опции, которые вам нужны:

"strictNullChecks": true,
"strictPropertyInitialization": true,

См. документация для получения дополнительной информации

--strictNullCheck:

В режиме строгой проверки нуля нулевые и неопределенные значения не находятся в домене каждого типа и являютсяприсваивается только себе и любому (за исключением того, что undefined также назначается для void).

--strictPropertyInitialization

Убедитесь, что неопределенные свойства класса инициализируются вконструкторЭта опция требует, чтобы --strictNullChecks был включен для вступления в силу.

Второй - тот, который вы хотите (но для работы требуется strictNullChecks)

Кстати, как @Jayasai Amerineni упоминает, ваш пример не должен вызывать это предупреждение.

...