Відповіді:
Все, що вам потрібно зробити, це визначити свій resultмасив рядків, як:
const result : string[] = [];
Не визначаючи тип масиву, він за замовчуванням буде never. Отже, коли ви намагалися додати рядок до неї, це було невідповідність типу, і тому вона кинула помилку, яку ви побачили.
neverможе бути корисним масивом s. Але, дивлячись на це, я натрапив на цю відповідь, яка має чудову інформацію.
let x;), вона anyза замовчуванням має тип . Ні never.
any[]. Був здивований, що це never[]робить його марним. Неінтуїтивні. Дякую за відповідь. редагувати: граматика
Ще один спосіб:
const result = [] as any;
anyне є хорошим варіантом, оскільки воно в основному вимикає будь-які функції TypeScript. Це вирішення і може призвести до різних помилок.
Це здається недавньою регресією чи якоюсь дивною поведінкою в машинописі. Якщо у вас є код:
const result = []
Зазвичай це трактується так, ніби ви написали:
const result:any[] = []
Однак, якщо у вас є і noImplicitAnyБРЕХНЯ, І strictNullChecks ІСТИНА в вашому TSconfig, він розглядається як:
const result:never[] = []
Така поведінка не відповідає всій логіці, ІМХО. Увімкнення нульових перевірок змінює типи входу масиву ?? А потім включення noImplicitAnyфактично відновлює використання anyбез будь-яких попереджень ??
Коли у вас справді є масив any, вам не потрібно вказувати його додатковим кодом.
У мене була така ж помилка в функції Statless ReactJS під час використання ReactJs Hook useState . Я хотів встановити стан масиву об’єктів, тому якщо я використовую наступний спосіб
const [items , setItems] = useState([]);
і оновити стан так:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
Я отримував помилку:
Аргумент типу '{id: number; text: any} 'не призначається параметру типу' never '
але якщо зробити це так,
const [items , setItems] = useState([{}]);
Помилки немає, але є елемент з індексом 0, який не має даних (не хочу цього).
тому знайдене нами рішення:
const [items , setItems] = useState([] as any);
Я знайшов рішення
const [files, setFiles] = useState([] as any);
Видаліть "strictNullChecks": true з "compilerOptions" або встановіть його на false у файлі tsconfig.json вашого додатка Ng. Ці помилки зникнуть як завгодно, і ваш додаток успішно складеться
Відмова від відповідальності : Це лише обхідний шлях. Ця помилка з’являється лише тоді, коли нульові перевірки не обробляються належним чином, що в будь-якому випадку не є хорошим способом втілення справ.
never[]? Чи є коли-небудь використання для цього, окрім "масиву, який ВЖЕ буде порожнім?"