notes.json•3.15 kB
{
  "schema": "memory_document_v2",
  "metadata": {
    "id": "a9944844-add6-487c-adc8-c109861fb4f6",
    "title": "型解決に関する問題と修正",
    "documentType": "generic",
    "path": "notes.md",
    "tags": [],
    "lastModified": "2025-03-20T14:04:36.578Z",
    "createdAt": "2025-03-20T14:04:36.578Z",
    "version": 1
  },
  "content": {
    "rawContent": "# 型解決に関する問題と修正\n\n## 発生していた問題\n\nTypeScript 5.8.2にアップデートしたことで、型の解決に関する問題が発生していました。主に以下の問題が見つかりました:\n\n1. 同じ名前の型が複数の場所からインポートされていた\n   - 例:`WriteGlobalDocumentUseCase.ts`で、ドメイン層とスキーマ層から同時に`MemoryDocument`をインポート\n\n2. JSXとの互換性問題\n   - TypeScriptの新しいバージョンでは型解決の方法が変わり、.jsファイル拡張子を明示的に付ける必要がある\n\n3. 型と実装の混同\n   - 一部のファイルで、`import type`を使うべき場所で通常の`import`が使われていた\n   - 逆に、`import type`を使っていた場所で実際のクラスを使おうとしていた\n\n## 修正内容\n\n1. `WriteGlobalDocumentUseCase.ts`\n   - スキーマからのインポート `import type { MemoryDocument } from \"../../../schemas/index.js\";` を削除\n   - ドメイン層の `MemoryDocument` クラスだけを使用するように修正\n\n2. `WriteJsonDocumentUseCase.ts`\n   - 重複するインポートを解消:\n   ```typescript\n   // 削除\n   import type { JsonDocument } from \"../../../schemas/json-document.js\";\n   \n   // 型ではなくクラスとしてインポート\n   import { JsonDocument, DocumentType } from \"../../../domain/entities/JsonDocument.js\";\n   ```\n\n## 今後の修正が必要な項目\n\n1. 他のファイルでも同様の型の重複や不整合がある可能性がある\n2. 特に以下のファイルには注意が必要:\n   - `ReadJsonDocumentUseCase.ts`\n   - `SearchJsonDocumentsUseCase.ts`\n\n## 考察\n\nこの問題は以前行ったスキーマとドメインオブジェクトの分離作業の続きと関連しています。ドメイン層の実装クラスとスキーマ層の型定義の名前が衝突したことが原因です。\n\nTypeScript 5.8.2では型解決がより厳格になり、以前は問題なかった曖昧なインポートが検出されるようになりました。この機会に型定義とクラス実装の関係を整理することが重要です。\n",
    "sections": {
      "": "この問題は以前行ったスキーマとドメインオブジェクトの分離作業の続きと関連しています。ドメイン層の実装クラスとスキーマ層の型定義の名前が衝突したことが原因です。\n\nTypeScript 5.8.2では型解決がより厳格になり、以前は問題なかった曖昧なインポートが検出されるようになりました。この機会に型定義とクラス実装の関係を整理することが重要です。"
    }
  }
}