Tôi đang sử dụng Microsoft TypeScript-React-Starter và đã nhận lỗi biên dịch này trong npm start
:Loại phần tử JSX 'Ứng dụng' không phải là hàm tạo hàm cho các phần tử JSX. Các loại bất động sản 'setstate' không phù hợp
./src/index.tsx
(16,5): error TS2605: JSX element type 'App' is not a constructor function for JSX elements.
Types of property 'setState' are incompatible.
Type '{ <K extends never>(f: (prevState: null, props: {}) => Pick<null, K>, callback?: (() => any) | un...' is not assignable to type '{ <K extends never>(f: (prevState: {}, props: any) => Pick<{}, K>, callback?: (() => any) | undef...'.
Types of parameters 'f' and 'f' are incompatible.
Type '(prevState: {}, props: any) => Pick<{}, any>' is not assignable to type '(prevState: null, props: {}) => Pick<null, any>'.
Types of parameters 'prevState' and 'prevState' are incompatible.
Type 'null' is not assignable to type '{}'.
Vì vậy, nó có vẻ như chức năng setState
tôi có chữ ký không chính xác nhưng tôi không chắc chắn làm thế nào để sửa chữa nó . Dưới đây là mã của tôi:
class App extends React.Component<{}, null> {
render() {
return (
<div className="App">
...
</div>
);
}
}
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root') as HTMLElement
);
Tôi đang sử dụng:
node v6.11.0
npm v5.1.0
typescript v2.4.1
react v15.6.1
redux v3.7.1
react-redux v5.0.5
react-scripts-ts v2.3.2
Cập nhật:
tôi phát hiện ra rằng việc loại bỏ các loại generic <{}, null>
xóa lỗi. Nhưng tôi vẫn muốn tìm hiểu lý do tại sao tôi đã nhận được lỗi.
Nếu thành phần ứng dụng không sử dụng trạng thái, bạn có thể biến nó thành một thành phần không trạng thái chức năng thay thế. –
@ D-reaper 'App' sử dụng trạng thái trong trường hợp của tôi. Tôi đang sử dụng 'redux' để quản lý trạng thái. Tôi đoán đó là lý do tại sao tôi không phải viết 'prevState()' một cách rõ ràng? – CherryQu
Tôi nghĩ rằng khi bạn đang chuyển 'null' làm đối số kiểu thứ hai trong React.Component, nó định nghĩa cấu trúc của trạng thái và nó chỉ tương thích với một số kiểu nhất định (ví dụ như đối tượng), khiến TS đưa ra lỗi đó. '' hoặc chỉ '<{}>' cũng sẽ hoạt động. –