Odpowiedzi:
Wszystko, co musisz zrobić, to zdefiniować swoją resultjako tablicę ciągów, jak poniżej:
const result : string[] = [];
Bez zdefiniowania typu tablicy domyślnie będzie to never. Więc kiedy próbowałeś dodać do niego ciąg, był to niezgodny typ, więc wyrzucił błąd, który zobaczyłeś.
nevers będzie przydatna. Ale patrząc na to, natrafiłem na tę odpowiedź, która ma świetne informacje.
let x;), jest ona anydomyślnie typu. Nie never.
any[]. Byłem zaskoczony, że to never[]czyni go bezużytecznym. Nieintuicyjne. Dziękuję za odpowiedź. edycja: gramatyka
Innym sposobem jest:
const result = [] as any;
anynie jest dobrą opcją, ponieważ w zasadzie wyłącza wszelkie funkcje TypeScript. Jest to obejście i może prowadzić do różnych błędów.
Wydaje się, że jest to niedawna regresja lub jakieś dziwne zachowanie w maszynopisie. Jeśli masz kod:
const result = []
Zwykle byłoby to traktowane tak, jakbyś napisał:
const result:any[] = []
jednak jeśli masz zarówno noImplicitAnyFALSE, jak i strictNullChecks TRUE w swoim tsconfig, jest to traktowane jako:
const result:never[] = []
To zachowanie przeczy wszelkiej logice, IMHO. Włączenie sprawdzania wartości null zmienia typy wpisów tablicy? A potem włączenie noImplicitAnyfaktycznie przywraca użytkowanie anybez żadnych ostrzeżeń ??
Kiedy naprawdę masz tablicę any, nie powinieneś oznaczać jej dodatkowym kodem.
Miałem ten sam błąd w ReactJS funkcji statless podczas korzystania ReactJs Hook useState . Chciałem ustawić stan tablicy obiektów, więc jeśli użyję następującego sposobu
const [items , setItems] = useState([]);
i zaktualizuj stan w ten sposób:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
Otrzymałem błąd:
Argument typu „{id: numer; text: any} 'nie można przypisać do parametru typu' never '
ale jeśli zrobisz to w ten sposób,
const [items , setItems] = useState([{}]);
Błąd zniknął, ale istnieje element w indeksie 0, który nie ma żadnych danych (nie chcę tego).
więc rozwiązanie, które znalazłem, to:
const [items , setItems] = useState([] as any);
Rozwiązaniem, które znalazłem, było
const [files, setFiles] = useState([] as any);
Usuń „strictNullChecks”: true z „compilerOptions” lub ustaw na false w pliku tsconfig.json aplikacji Ng. Te błędy znikną jak wszystko, a aplikacja zostanie pomyślnie skompilowana.
Zrzeczenie się : to tylko obejście. Ten błąd pojawia się tylko wtedy, gdy sprawdzenia wartości null nie są prawidłowo obsługiwane, co w każdym przypadku nie jest dobrym sposobem na załatwienie sprawy.
never[]? czy jest kiedykolwiek pożytek z tego poza "tablicą, która ZAWSZE będzie pusta?"