2017-01-25 10 views
1

я добавил «noImplicitAny» и «noImplicitReturns» на мой машинопись tsconfig.json файл:Машинопись noImplicitAny и noImplicitReturns не работает, как ожидалось

{ 
    "compilerOptions": { 
     "target":"es5", 
     "noImplicitAny": true, 
     "noImplicitThis": true, 
     "noImplicitReturns": true, 
     "noUnusedLocals":true, 
     "out": "dist/js/main.js" 
    } 
} 

я ожидал, что следующий код будет генерировать ошибки, или, по крайней мере, предупреждения:

private randomMove() { // no return type but no warning :(
    let o = 3;   // no type for o but no warning :(
} 

«noUnusedLocals» работает.

Это как это должно работать, я что-то упускаю? Возможно ли, чтобы код Visual Studio генерировал предупреждения, когда вы не указываете типы/типы возвращаемых данных?

ответ

3

Вы неправильно поняли, что означают эти флаги.

noImplicitAny:

ошибка Raise на выражений и деклараций с подразумеваемой любого типа.

Это не так в вашем примере, потому что компилятор делает вывод, что тип o является number, вы должны получить сообщение об ошибке, если вы:

let o; 

noImplicitReturns:

Сообщить об ошибке, если не все пути кода в функции возвращают значение.

Ваша функция может не нужно возвращать вообще, но как это сделать:

function fn(a: number): boolean { 
    if (a > 0) { 
     return false; 
    } 
} 

должно привести к ошибке компиляции.

Нет, нет способа (что я знаю), что вызовет ошибку компилятора, если функция не включает тип возврата.
Это потому, что:

  1. Компилятор может вывести сам тип возвращаемого большую часть времени
  2. Что делать, если ваша функция не возвращает? Было бы слишком многословным для многих людей нужно аннотировать каждую функцию с : void
+0

Спасибо, что имеет смысл :) я бы до сих пор, как предупреждение/scribbly линия в моем коде, когда я опускаю тип! Вот почему я использую TypScript для начала :) – Kokodoko

+0

Почему? Если компилятор может сделать это сам, зачем вы хотите сделать его обязательным? –

+0

Возможно, не обязательно, но, по крайней мере, выдает предупреждение или squiggly line. Основная причина использования машинописного текста вместо Javascript заключается в том, что типы проверяются ... Я имею в виду, что javascript также выводит тип ... – Kokodoko