Câu trả lời:
Tất cả bạn phải làm là xác định của bạn resultnhư là một chuỗi chuỗi, như sau:
const result : string[] = [];
Không xác định kiểu mảng, theo mặc định nó sẽ là never. Vì vậy, khi bạn cố gắng thêm một chuỗi vào nó, đó là một kiểu không khớp và do đó, nó đã đưa ra lỗi mà bạn đã thấy.
nevers sẽ hữu ích. Nhưng trong khi xem xét nó tôi đã thấy câu trả lời này có thông tin tuyệt vời.
let x;) nó là kiểu anytheo mặc định. Không phải never.
any[]. Đã ngạc nhiên khi nó never[]làm cho nó vô dụng. Không trực quan. Cảm ơn câu trả lời. chỉnh sửa: ngữ pháp
Một cách khác là:
const result = [] as any;
anykhông phải là một lựa chọn tốt, vì về cơ bản nó sẽ tắt mọi tính năng TypeScript. Đó là một cách giải quyết và có thể dẫn đến các lỗi khác nhau.
Đây dường như là một hồi quy gần đây hoặc một số hành vi lạ trong bản thảo. Nếu bạn có mã:
const result = []
Thông thường nó sẽ được xử lý như thể bạn đã viết:
const result:any[] = []
tuy nhiên, nếu bạn có cả noImplicitAnyFALSE, VÀ strictNullChecks TRUE trong tsconfig, thì nó được coi là:
const result:never[] = []
Hành vi này bất chấp tất cả logic, IMHO. Bật kiểm tra null thay đổi các loại mục nhập của một mảng ?? Và sau đó bật noImplicitAnythực sự khôi phục việc sử dụng anymà không có bất kỳ cảnh báo nào ??
Khi bạn thực sự có một mảng any, bạn không cần phải chỉ ra nó với mã bổ sung.
Tôi đã có cùng một lỗi Trong ReactJS chức năng statless khi sử dụng ReactJs Hook useState . Tôi muốn đặt trạng thái của một mảng đối tượng, vì vậy nếu tôi sử dụng cách sau
const [items , setItems] = useState([]);
và cập nhật trạng thái như thế này:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
Tôi đã nhận được lỗi:
Đối số của loại '{id: number; text: any} 'không thể gán cho tham số loại' never '
nhưng nếu làm như thế này,
const [items , setItems] = useState([{}]);
Lỗi không còn nhưng có một mục ở 0 chỉ mục không có bất kỳ dữ liệu nào (không muốn điều đó).
Vì vậy, giải pháp tôi tìm thấy là:
const [items , setItems] = useState([] as any);
Tôi đã có thể vượt qua điều này bằng cách sử dụng từ khóa Array thay vì dấu ngoặc rỗng:
const enhancers: Array<any> = [];
Sử dụng:
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
Giải pháp tôi tìm thấy là
const [files, setFiles] = useState([] as any);
Xóa "rictNullChecks": true khỏi "Trình biên dịch" hoặc đặt thành sai trong tệp tsconfig.json của ứng dụng Ng của bạn. Những lỗi này sẽ biến mất như mọi thứ và ứng dụng của bạn sẽ biên dịch thành công.
Disclaimer : Đây chỉ là một cách giải quyết. Lỗi này chỉ xuất hiện khi kiểm tra null không được xử lý đúng cách, trong mọi trường hợp không phải là cách tốt để hoàn thành công việc.
never[]? có bao giờ sử dụng cho điều đó ngoại trừ "một mảng sẽ LUÔN trống không?"