Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
/* @flow */
function Foo (a) {
this.a = a;
}
Foo.prototype.bar = function(foo) {
console.log(foo.a);
}
var foo = new Foo(1);
foo.bar(foo);
foo.bar(123);
function define( config ){
for( var path in config ) {
var current = this
var names = path.split( '.' )
for( var i = 0 ; i < names.length - 1 ; ++i ) {
var name = names[ i ] || 'prototype'
var next = current[ name ]
if( !next ) next = current[ name ] = {}
current = next
}
current[ names[ i ] || 'prototype' ] = config[ path ]
}
}
define({
'Foo' : function Foo (a) {
this.a = a;
},
'Foo..bar' : function(foo) {
console.log(foo.a);
}
})
var foo = new Foo(1);
foo.bar(foo);
foo.bar(123);
/Users/nkt/Desktop/flow.js:9:24,38: access of computed property/element
Computed property/element cannot be accessed on global object
/Users/nkt/Desktop/flow.js:10:32,51: assignment of computed property/element
Computed property/element cannot be assigned on global object
/Users/nkt/Desktop/flow.js:13:9,61: assignment of computed property/element
Computed property/element cannot be assigned on global object
/Users/nkt/Desktop/flow.js:26:15,17: identifier Foo
Unknown global name
Found 4 errors
В отличии от TypeScript, есть возможность делать код типизированным постепенно.
js на ts и всё будет компилироваться, поскольку Typescript — надмножество Javascript. А потом постепенно заменять типы — например, начиная с локальных переменных.function foo( a ){
alert( a || 'hello world' )
}
foo() // error TS2081: Supplied parameters do not match any signature of call target.
a внутри функции.var x = "test";
x = 123;
/* @flow */
var x = "test";
x.indexOf('t');
x = 123;
x.indexOf('t');
/* @flow */
var x = "test";
x.indexOf('t');
while( o > 1 ) {
o--;
x = Math.random();
}
x.toFixed( 2 );
/Users/nkt/Desktop/flow.js:5:8,8: identifier o
Unknown global name
/Users/nkt/Desktop/flow.js:9:1,14: call of method toFixed
Property not found in
/* @flow */
var x = "test";
x.indexOf('t');
var o = 0;
do {
o--;
x = Math.random();
}while( o > 1 );
x.toFixed( 2 );
var data = ["123", 123];
var elem;
for(var i =0; i < data.length; i++)
{
elem = data[i];
elem.indexOf('1'); // что-то будет?
}
JSX и ангуляр выкинут в помойку
ng-repeat./** @param {Object} a */
function(a){
var x = a['someField'];
}
//Преобразует к
function(a){
var x = a.someField;
}
А в дебаг режиме не нужно ничего компилировать, оно и так работает как RequireJS.
Flow — статический анализ типов в JS от Facebook