2014-01-11 7 views
1

ТипScript не разрешает оператор with из JavaScript.TypeScript Forbids With Statement

var radius = 12; 
with (Math) { 
    var area = PI * radius * radius; 
} 

Объяснение в том, что не допускается в «строгого режима» в ECMAScript 5.

Это просто with заявление - или что-либо запрещено на «строгого режима» также не допускается в машинописном ?

ответ

2

TypeScript допускает оператор with, поскольку это не будет нарушать его надмножество JavaScript. Тем не менее, компилятор выдает ошибку (хотя все еще компилирует и выводит код), потому что нет никакого способа узнать что-либо о том, что ссылается на оператор with, кроме как во время выполнения, что полностью нарушает цель статической типизации, поэтому вы не должны использовать его в программе TypeScript. Там есть additional discussion on the TypeScript forum.

Что касается другого строгого режима, который не допускается в TypeScript, поскольку TypeScript пытается следовать спецификации ES6, где он может для своих новых функций, а спецификация ES6 (§10.2.1) гласит: «Модуль кода всегда является строгим кодом . »И« ClassDeclaration или ClassExpression всегда строгий код ». Вероятно, вы обнаружите, что почти весь ваш код TypeScript должен будет соответствовать строгому режиму в какой-то момент в будущем, если не сегодня.

+1

Это действительно не позволяет - это испускает ошибку, и в спецификации указано, что «использование« с »statememt в TypeScript является ошибкой». - как всегда, компилятор пытается дать вам код даже при наличии ошибок. Спасибо за ссылку ES6, хотя, похоже, что TypeScript будет выровняться с этими определениями. – Fenton

+0

Да, я думаю, это зависит от того, как вы хотите определить «разрешить»; компилятор выдает код, но он также всегда будет испускать ошибку. Так оно работает пока оно терпит неудачу. ¯ \\ (° _o)/¯ –

+1

История моей жизни :) – Fenton