Yanıtlar:
Tek yapmanız gereken, resultdizinizi aşağıdaki gibi bir dize dizisi olarak tanımlamaktır :
const result : string[] = [];
Dizi türünü tanımlamadan, varsayılan olarak olacaktır never. Bu nedenle, bir dize eklemeye çalıştığınızda, bu bir tür uyuşmazlığıydı ve böylece gördüğünüz hatayı attı.
nevers'nin yararlı olacağı bir kullanım durumu düşünemiyorum . Ama içine bakarken çok iyi bilgiye sahip bu cevaba rastladım .
let x;) bildirdiğinizde any, varsayılan olarak türdür . Hayır never.
any[]. Bu never[]işe yaramaz hale şaşırdı . Unintuitive. Cevap için teşekkürler. düzenleme: dilbilgisi
Başka bir yol:
const result = [] as any;
anyiyi bir seçenek değildir, çünkü temelde herhangi bir TypeScript özelliğini kapatır. Bu geçici bir çözümdür ve çeşitli hatalara yol açabilir.
Bu kısa bir süre önce yaşanan bir gerileme ya da dizgideki garip bir davranış gibi görünüyor. Kodunuz varsa:
const result = []
Genellikle yazdığınız gibi ele alınır:
const result:any[] = []
ancak tsconfig dosyasında noImplicitAnyYANLIŞ ve strictNullChecks DOĞRU varsa, şu şekilde değerlendirilir:
const result:never[] = []
Bu davranış, IMHO tüm mantığa meydan okur. Boş denetimleri açmak bir dizinin giriş türlerini değiştirir? Ve sonra açmak noImplicitAnyaslında anyherhangi bir uyarı olmadan kullanımını geri yükler ??
Gerçekten bir diziniz olduğunda any, bunu ekstra kodla belirtmeniz gerekmez.
ReactJs Hook useState kullanırken aynı hatayla ReactJS statless işlevi vardı . Bir nesne dizisinin durumunu ayarlamak istedim, bu yüzden aşağıdaki yolu kullanırsam
const [items , setItems] = useState([]);
ve durumu şu şekilde güncelleyin:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
Hata alıyordum:
'{id: number; text: any} ',' never 'türündeki parametreye atanamaz
ama eğer böyle yaparsa,
const [items , setItems] = useState([{}]);
Hata gitti, ancak 0 dizininde veri içermeyen bir öğe var (bunu istemiyorum).
böylece bulduğum çözüm:
const [items , setItems] = useState([] as any);
Bulduğum çözüm
const [files, setFiles] = useState([] as any);
Kaldır doğrudur: "strictNullChecks" dan "compileroptions" veya false olarak ayarlayın tsconfig.json sizin Ng app dosyası. Bu hatalar her şey gibi gider ve uygulamanız başarıyla derlenir.
Feragatname : Bu sadece bir çözümdür. Bu hata, yalnızca boş denetimler düzgün bir şekilde ele alınmadığında ortaya çıkar; bu, her durumda işleri halletmek için iyi bir yol değildir.
never[]? bunun için "HER ZAMAN boş olacak bir dizi" dışında bir kullanım var mı?