'daki birleşim türleri dizisine nesne dizisi atanamıyor Flow öğreniyorum ve bu yüzden JavaScript ve Flow ile küçük bir hobi projesi üzerinde çalışıyorum. Foo
sınıfında ve nesnesinde yapıcıda bir seçenek olarak almak istediğim farklı bir sınıf Bar
var. Bununla birlikte, her bir nesne için başka bir veri gönderebilmek istiyorum ve bu yüzden her öğenin düz Foo
nesnesi veya bir dizi veya nesneye sarılmış Foo
nesnesi olduğu bir diziye sahip olmak istiyorum. Ancak, bunun için kod yazmayı denediğimde, nedenini anlamadığım bazı garip hatalar aldım. Anlayabildiğim kadarıyla, bir tür çakışma olduğunu düşünüyor çünkü Foo
, ile arasında birleşim türünün uyumlu olmadığını düşünüyor, ancak anladığım kadarıyla sadece bunlardan en az biriyle uyumlu olması gerekiyor. Ben şu hataları olsunFlow
// @flow
class Foo { }
interface BarOptions {
foos: (Foo | [ Foo ] | { foo: Foo })[]; // line 6
}
class Bar {
constructor(options?: BarOptions) { }
}
const foo: Foo = new Foo();
const bar = new Bar({
foos: [ foo ], // line 16
});
: orada
Line 6:
tuple type: This type is incompatible with Foo
object type: This type is incompatible with Foo
Line 16:
tuple type: This type is incompatible with Foo
object type: This type is incompatible with Foo
mı ...
Burada aldığım kesin hataları yeniden üretmek için gereken minimum kodu (link to tryflow.org example) var Bu hatalar için sezgisel (ya da olmayan) bir neden?
bu işe yarar açıklayabilir misiniz? (Benim sorununun nasıl düzeltileceği değil, ilk etapta bunun neden bir sorun olduğunu anlamaya çalışıyor) – Frxstrem
İkisinin nasıl farklı olduğunu göremiyorum; Bunu anladığım gibi, her iki durumda da foo'nun aynı tür (Foo) ile beyan edileceği tek fark, ilk satırınızda türün açık olması, ikincide ise açık olmasıdır. Akış türlerinin nasıl çalıştığını yanlış anlamış olmadıkça, bunların nasıl farklı davrandıklarını göremiyorum (aslında öyle görünüyorlar). – Frxstrem
Bu sorun bununla ilgili olabilir mi? https://github.com/facebook/flow/issues/1569 –