2015-10-08 16 views
6

Akış dokümanları ve örnekler aracılığıyla kapsamlı gezinme ve okuma, Javascript'te, sınıfları döndüren işlevlere sahip olan çok yaygın bir örnek göstermedi. nasıl düzgün bir yoluFlowtype - Backbone Modelleri gibi sınıf fabrikaları için nasıl bildirim yazılır?

/** 
* @class User 
* @augments Backbone.Model 
*/ 
var User = Backbone.Model.extend(/**@lends User.prototype */{ 
    getFullName: function() {...} 
}); 

var mı şu şekildedir:

var User = Backbone.Model.extend({ 
    getFullName: function() { 
    return this.get('firstName') + ' ' + this.get('lastName'); 
    } 
}); 


var exampleUser = new User(); 
exampleUser.set('firstName', 'Johny'); //set() is a method from Backbone.Model 
exampleUser.set('lastName', 'Something'); 
exampleUser.getFullName(); //method coming from User class 

JSDoc olarak, bazı IDE iyi otomatik tamamlama anlamaya muktedir olmak üzere sınıf açıklama olabilir: Bir kanonik örnek Backbone olduğunu Akıştaki bu kalıba açıklama ekle

cevap

8
/* @flow */ 

class Model { 
    get(name: string): any {} 
    set(name: string, value: any): void {} 
} 

function extend<T>(def: T): Class<Model & T> { 
    throw new Error('not implemented') 
} 

var User = extend({ 
    getFullName: function() { 
     return this.get('firstname') + this.get('lastname') 
    } 
}) 

var a = new User 

a.get('firstname') 
a.getFullName() 
// a.notExisting give error 

I

Bu kod 'hem Model ve T bir Class dönüş bir tanım nesnesi türü T Verilen ' deseni ifade kesişme türü ve genel tür kullanımı demleme-sevk altında derler akış 0.11


Akış hakkındaki kişisel fikrim aşağıdadır. Akış belgelerinin az olduğu konusunda hemfikir olmak zorundayım. Özelliklerini öğrenmenin en iyi yolu muhtemelen okuma akışının okunmasıdır React annotation and flow's source. Akış, bir programın ek açıklama yapmadan yazılmasını sağlayan sofistike bir tür çıkarım algoritmasına dayanmaktadır. Bu yüzden Akış size not eklememeyi ve böylece belgelerini yapmasını sağlamak için tasarlanmıştır. Bununla birlikte, çıkarsama türünü açıklamadan çıkarmak için çok gelişmiş değildir. Kod bir örnek.

+1

Sadece küçük bir nit: Flow, H-M tipi çıkarım kullanmaz. Akış analizini kullanır (dolayısıyla Akış). Bu cevabı sağladığınız için teşekkürler! –

+0

@SamGoldman Düzeltmeniz için teşekkürler! Güncelleme yanıtı. –