2017-07-07 13 views
8

Ben in TypeScript yaptığı gibi in Flow kontrol yazmak için bu kodu bekliyordum:Akışı neden döndüklerine bağlı olarak bir işlev türünü çıkarmaz?

4: onClick =() => { return true; } 
      ^function. Could not decide which case to select 
3: var onClick : (() => void) | (() => boolean); 
       ^union type 

bu tasarım kararı için genel bir isim var mı ve ne: Yerine

var onClick : (() => void) | (() => boolean); 
onClick =() => { return true; } 

, bu hatayı alıyorum arkasındaki mantık?

Akış denetleyicisinden bir işlevin dönüş türünün döndürme ifadelerinden çıkmasını istemek mümkün müdür?

+0

Sana bi cevabım yok ama neden olmasın do (() => Promise | void) '? – loganfsmyth

+0

farklı şeyler demek istediler: '() => A | B ', bazen' A 'değerini döndüren tek bir işlevdir ve diğer zamanlarda 'B' döndürürken,' (() => A) | (() => B) ', her zaman" A "değerini veya her zaman B'yi döndüren bir işlevi döndüren bir işlevdir. –

+0

, ör. 5. satırda aramanın üzerine gelin: https://www.typescriptlang.org/play/index.html#src=const%20f%20%3D%20 (x)% 20% 3D% 3E% 20console.log (x)% 3B% 0D% 0Avar% 20onClick% 20% 3A% 20 ((),% 20,% 3D% 3E% 20void)% 20% 7C% 20 ((),% 20,% 3D% 3E% 20Promise% 3Cvoid% 3E) % 3B% 0D% 0AraBasın% 20% 3D% 20()% 20% 3D% 3E% 20f (% 22hi% 22)% 3B% 0D% 0A% 0D% 0AraClick()% 3B –

cevap

4

Sen açık döküm, örneğin sağlamak ya da olması gerekir: Varoluşçu türü, örneğin

type FuncV =() => void; 
type FuncB =() => boolean; 
var onClick : FuncV | FuncB; 

onClick = (() => { return true; }: FuncB); 

Veya kullanın:

type Func<T: (void | string)> =() => T; 
var f: Func<*>; 

f =() => { return "hello"; }; 
var msg = f() + " world!"; // type checks against return value above 
+0

Etrafında çalışmanın yollarını biliyorum. Bunun neden seçildiğini merak ettim, zira TS ile Glow arasında bahsetmediğim büyük bir fark gibi görünüyor. –

+0

İyi ek/düzenle! Hala detayları ve akıl yürütme hakkında merak, ama bu geçici çözümler yapmak zorunda kalacak :-) –

+0

Bir saniye bekleyin, bu f:() => (void | string) 'ile aynıdır. oh d'! –

İlgili konular