質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

10054閲覧

Importした型定義でeslintのUnsafe assignment of an `any` value.が出てしまう

izumeeeel

総合スコア11

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/10/02 07:23

編集2021/10/02 07:24

以下のファイルで型定義をして

typescript

1export = Expense; 2 3declare namespace Expense { 4 interface IFetchedExpense{ 5 id: number; 6 title: string; 7 expense: number; 8 type_id: number; 9 created_by: number; 10 created_at: Date; 11 updated_at: Date; 12 } 13 14 interface IExpense{ 15 id: number; 16 title: string; 17 expense: number; 18 typeId: number; 19 createdBy: number; 20 createdAt: Date; 21 updatedAt: Date; 22 } 23}

以下のファイルでimportして使っているのですが、

typescript

1import { IExpense, IFetchedExpense } from '../../../../types/expenses' 2 3export const convertFetchedExpense = (expense: IFetchedExpense): IExpense => { 4 return { 5 id: expense.id, 6 title: expense.title, 7 expense: expense.expense, 8 typeId: expense.type_id, 9 createdBy: expense.created_by, 10 createdAt: expense.created_at, 11 updatedAt: expense.updated_at 12 } 13} 14

以下のようなeslintエラーが出てしまいます。

Unsafe assignment of an any value.eslint@typescript-eslint/no-unsafe-assignment

(property) Expense.IFetchedExpense.updated_at: Date

![エラー]
ちなみに、同じファイル内にinterfaceを書き込むとエラーが消えます。
型定義ファイルの書き方が悪いのでしょうか。
ご回答いただけると大変助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

export = Expense の記法がよくないです。
以下のように修正すればよいかと。

TypeScript

1export namespace Expense { 2 interface IFetchedExpense { 3 id: number; 4 title: string; 5 expense: number; 6 type_id: number; 7 created_by: number; 8 created_at: Date; 9 updated_at: Date; 10 } 11 12 interface IExpense { 13 id: number; 14 title: string; 15 expense: number; 16 typeId: number; 17 createdBy: number; 18 createdAt: Date; 19 updatedAt: Date; 20 } 21}

ただ namespace を export すると利用側は Expense.IFetchedExpense Expense.IExpense のように名前空間から記載する必要があります。
他のインターフェイスと名前が重複しないのであれば、以下のように直接 interface を export するのがよいかと思います。

TypeScript

1export interface IFetchedExpense { 2 id: number; 3 title: string; 4 expense: number; 5 type_id: number; 6 created_by: number; 7 created_at: Date; 8 updated_at: Date; 9} 10 11export interface IExpense { 12 id: number; 13 title: string; 14 expense: number; 15 typeId: number; 16 createdBy: number; 17 createdAt: Date; 18 updatedAt: Date; 19}

投稿2021/10/03 06:51

gekijin

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izumeeeel

2021/10/08 01:51

gekijin様 ご回答いただきありがとうございます! 複数の方法まで提示していただき大変助かります。 両方大丈夫でしたが、個別にexportする方法で実装してみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問