質問編集履歴
6
編集
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
ReactのLoginPageコンポーネントで、Axiosを用いたPOSTリクエストを実装しています。VSCode上では正常に動作しているのですが、ESLintの実行時に下記のようなエラーが発生します。エラーは、型の安全性に関連しているようです。
|
3
3
|
|
4
4
|
エラーメッセージ:
|
5
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-
|
5
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-19/ae28c6dd-7e12-4cfc-bffc-e55f0ec34404.png)
|
6
6
|
状況:
|
7
7
|
npm run lintを実行した際に、上記のESLintエラーが表示されます。
|
8
8
|
@typescript-eslint/no-unsafe-assignmentや@typescript-eslint/no-unsafe-callといった型安全性に関するルールで引っかかっているようです。
|
@@ -13,23 +13,36 @@
|
|
13
13
|
エラー箇所において、型アサーションや例外処理などを試しましたが、ESLintの警告を取り除くことができません。
|
14
14
|
|
15
15
|
コードの該当箇所:
|
16
|
-
|
16
|
+
|
17
17
|
|
18
18
|
### 修正版:ヘディングのテキストコードの該当箇所:
|
19
19
|
import { Typography } from '@material-tailwind/react';
|
20
|
-
import axios, {
|
20
|
+
import axios, { AxiosResponse } from 'axios'; // AxiosErrorを追加
|
21
21
|
import React, { useState } from 'react';
|
22
|
-
|
23
22
|
import InputCheckboxComponent from '@/components/atoms/input_checkbox';
|
24
23
|
import InputTextComponent from '@/components/atoms/input_text';
|
25
24
|
import LinkComponent from '@/components/atoms/link';
|
26
25
|
import FormCard from '@/components/molecules/formCard';
|
27
26
|
import DefaultComponent from '@/components/templates/default';
|
28
27
|
|
29
|
-
import { LoginResponse } from './type';
|
28
|
+
// import { LoginResponse } from './type';
|
29
|
+
|
30
|
+
// LoginResponse型の定義
|
31
|
+
interface LoginResponse {
|
32
|
+
authorization?: {
|
33
|
+
token: string;
|
34
|
+
};
|
35
|
+
}
|
36
|
+
|
37
|
+
// 環境変数の型定義
|
38
|
+
declare const process: {
|
39
|
+
env: {
|
40
|
+
REACT_APP_API_URL?: string;
|
41
|
+
};
|
42
|
+
};
|
30
43
|
|
31
44
|
export default function LoginPage() {
|
32
|
-
const [email, setEmail] = useState('');
|
45
|
+
const [email, setEmail] = useState<string>('');
|
33
46
|
|
34
47
|
const API_URL = process.env.REACT_APP_API_URL;
|
35
48
|
|
@@ -39,7 +52,7 @@
|
|
39
52
|
|
40
53
|
const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
|
41
54
|
event.preventDefault();
|
42
|
-
const formData = new FormData(event.currentTarget);
|
55
|
+
const formData = new FormData(event.currentTarget);
|
43
56
|
const password = formData.get('password');
|
44
57
|
|
45
58
|
if (typeof password === 'string') {
|
@@ -49,8 +62,8 @@
|
|
49
62
|
const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
|
50
63
|
headers: { 'Content-Type': 'application/json' },
|
51
64
|
});
|
52
|
-
if (response.data.authorization) {
|
65
|
+
if (response.data && 'authorization' in response.data && response.data.authorization) {
|
53
|
-
const token = response.data.authorization.token;
|
66
|
+
const token: string = response.data.authorization.token;
|
54
67
|
console.log('Token:', token);
|
55
68
|
} else {
|
56
69
|
console.error('Invalid response structure');
|
@@ -80,6 +93,8 @@
|
|
80
93
|
ESLintバージョン: v8.57.0
|
81
94
|
TypeScriptバージョン: Version 5.5.3
|
82
95
|
axiosバージョン: axios@1.7.7
|
96
|
+
reactバージョン:@material-tailwind/react@2.1.9
|
97
|
+
│ └─ react@18.2.0
|
98
|
+
└─ react@18.3.1
|
83
99
|
|
84
100
|
|
85
|
-
|
5
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,6 +16,18 @@
|
|
16
16
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
|
17
17
|
|
18
18
|
### 修正版:ヘディングのテキストコードの該当箇所:
|
19
|
+
import { Typography } from '@material-tailwind/react';
|
20
|
+
import axios, { AxiosResponse } from 'axios';
|
21
|
+
import React, { useState } from 'react';
|
22
|
+
|
23
|
+
import InputCheckboxComponent from '@/components/atoms/input_checkbox';
|
24
|
+
import InputTextComponent from '@/components/atoms/input_text';
|
25
|
+
import LinkComponent from '@/components/atoms/link';
|
26
|
+
import FormCard from '@/components/molecules/formCard';
|
27
|
+
import DefaultComponent from '@/components/templates/default';
|
28
|
+
|
29
|
+
import { LoginResponse } from './type';
|
30
|
+
|
19
31
|
export default function LoginPage() {
|
20
32
|
const [email, setEmail] = useState('');
|
21
33
|
|
@@ -27,8 +39,7 @@
|
|
27
39
|
|
28
40
|
const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
|
29
41
|
event.preventDefault();
|
30
|
-
|
31
|
-
|
42
|
+
const formData = new FormData(event.currentTarget);
|
32
43
|
const password = formData.get('password');
|
33
44
|
|
34
45
|
if (typeof password === 'string') {
|
@@ -38,7 +49,6 @@
|
|
38
49
|
const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
|
39
50
|
headers: { 'Content-Type': 'application/json' },
|
40
51
|
});
|
41
|
-
|
42
52
|
if (response.data.authorization) {
|
43
53
|
const token = response.data.authorization.token;
|
44
54
|
console.log('Token:', token);
|
4
コード追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,7 +16,48 @@
|
|
16
16
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
|
17
17
|
|
18
18
|
### 修正版:ヘディングのテキストコードの該当箇所:
|
19
|
+
export default function LoginPage() {
|
20
|
+
const [email, setEmail] = useState('');
|
21
|
+
|
22
|
+
const API_URL = process.env.REACT_APP_API_URL;
|
23
|
+
|
24
|
+
if (!API_URL) {
|
25
|
+
throw new Error('API URL is not defined in the environment variables');
|
26
|
+
}
|
27
|
+
|
28
|
+
const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
|
29
|
+
event.preventDefault();
|
30
|
+
|
31
|
+
const formData = new FormData(event.currentTarget);
|
32
|
+
const password = formData.get('password');
|
33
|
+
|
34
|
+
if (typeof password === 'string') {
|
35
|
+
const data = { email, password };
|
36
|
+
console.log(data);
|
37
|
+
try {
|
38
|
+
const response: AxiosResponse<LoginResponse> = await axios.post<LoginResponse>(API_URL, data, {
|
39
|
+
headers: { 'Content-Type': 'application/json' },
|
40
|
+
});
|
41
|
+
|
42
|
+
if (response.data.authorization) {
|
43
|
+
const token = response.data.authorization.token;
|
44
|
+
console.log('Token:', token);
|
45
|
+
} else {
|
46
|
+
console.error('Invalid response structure');
|
47
|
+
}
|
48
|
+
} catch (error) {
|
49
|
+
if (axios.isAxiosError(error)) {
|
19
|
-
|
50
|
+
console.error('Axios error:', error.response?.data ?? 'No response data');
|
51
|
+
} else if (error instanceof Error) {
|
52
|
+
console.error('Unexpected error:', error.message);
|
53
|
+
} else {
|
54
|
+
console.error('An unknown error occurred');
|
55
|
+
}
|
56
|
+
}
|
57
|
+
} else {
|
58
|
+
console.error('Password is not valid');
|
59
|
+
}
|
60
|
+
};
|
20
61
|
|
21
62
|
質問:
|
22
63
|
このエラーはどのように対処すればよいのでしょうか?
|
3
写真追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
コードの該当箇所:
|
16
16
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
|
17
17
|
|
18
|
+
### 修正版:ヘディングのテキストコードの該当箇所:
|
19
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-09/4dde462c-5194-4b80-aa04-ca90624a8659.png)
|
18
20
|
|
19
21
|
質問:
|
20
22
|
このエラーはどのように対処すればよいのでしょうか?
|
2
写真に変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,11 +2,7 @@
|
|
2
2
|
ReactのLoginPageコンポーネントで、Axiosを用いたPOSTリクエストを実装しています。VSCode上では正常に動作しているのですが、ESLintの実行時に下記のようなエラーが発生します。エラーは、型の安全性に関連しているようです。
|
3
3
|
|
4
4
|
エラーメッセージ:
|
5
|
-
./components/pages/login/login.tsx
|
6
|
-
33:15 Error: Unsafe assignment of an error typed value. @typescript-eslint/no-unsafe-assignment
|
7
|
-
33:62 Error: Unsafe call of an `error` type typed value. @typescript-eslint/no-unsafe-call
|
8
|
-
|
5
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/38f9d5d0-f01c-4434-99fb-f0356f80aa22.png)
|
9
|
-
|
10
6
|
状況:
|
11
7
|
npm run lintを実行した際に、上記のESLintエラーが表示されます。
|
12
8
|
@typescript-eslint/no-unsafe-assignmentや@typescript-eslint/no-unsafe-callといった型安全性に関するルールで引っかかっているようです。
|
1
写真に変えた
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,27 +17,8 @@
|
|
17
17
|
エラー箇所において、型アサーションや例外処理などを試しましたが、ESLintの警告を取り除くことができません。
|
18
18
|
|
19
19
|
コードの該当箇所:
|
20
|
-
try {
|
21
|
-
|
20
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-09-08/7c90af43-908b-466f-bc93-07f1efdeee2f.png)
|
22
|
-
headers: { 'Content-Type': 'application/json' },
|
23
|
-
});
|
24
21
|
|
25
|
-
if (response.data.authorization) {
|
26
|
-
const token = response.data.authorization.token;
|
27
|
-
console.log(`Token: ${token}`);
|
28
|
-
} else {
|
29
|
-
console.error('Invalid response structure');
|
30
|
-
}
|
31
|
-
} catch (error) {
|
32
|
-
if (axios.isAxiosError(error)) {
|
33
|
-
const axiosError = error as AxiosError<LoginResponse>;
|
34
|
-
console.error('Axios error:', axiosError.response?.data ?? 'No response data');
|
35
|
-
} else if (error instanceof Error) {
|
36
|
-
console.error('Unexpected error:', error.message);
|
37
|
-
} else {
|
38
|
-
console.error('An unknown error occurred');
|
39
|
-
}
|
40
|
-
}
|
41
22
|
|
42
23
|
質問:
|
43
24
|
このエラーはどのように対処すればよいのでしょうか?
|