◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-28中級

Rork が生成したコードの TypeScript 型エラーが消えない時に試す5つの修正パターン

Rorkが出力したReact NativeコードでTypeScriptの型エラーが消えないときに疑う5つのパターンです。Propsの暗黙のany、useStateの型推論ミス、@typesの欠落、ナビゲーションparam型の食い違い、as anyのごまかしについて具体的な書き換え方を示します。

Rork585TypeScript8React Native239型エラーデバッグ22AI 生成コード

Rork で生成したコードを VS Code で開いた瞬間、赤い波線が画面いっぱいに走っている経験はないでしょうか。そのままプロンプトに「型エラーを直して」と打ち込んでも、AI は別の場所で同じエラーを再発させ、修正と破壊を行ったり来たりすることがあります。

私がいくつかのアプリを Rork で作ってみて気づいたのは、しつこく残る型エラーには共通したパターンがあるということです。AI に丸投げして直らない場合は、人間側で型を一度だけ整えてあげると、その後の生成が驚くほど安定します。今回はそのときに役立つ5つの修正パターンを、実際のコード例とともに紹介します。

パターン1: 暗黙の any(Props の型未定義)

最もよく見るのが、コンポーネントの props に型を付け忘れているパターンです。AI は機能を急いで実装したいので、型定義を後回しにすることがあります。

// ❌ Rork がよく出すコード(暗黙の any)
export function ProductCard({ name, price, onPress }) {
  return (
    <Pressable onPress={onPress}>
      <Text>{name}</Text>
      <Text>¥{price.toLocaleString()}</Text>
    </Pressable>
  );
}
// → strict モードで「Parameter 'name' implicitly has an 'any' type」が無限に出る

修正は型エイリアスを切り出して props に付けます。

// ✅ 型を付けて再生成を安定させる
type ProductCardProps = {
  name: string;
  price: number;
  onPress: () => void;
};
 
export function ProductCard({ name, price, onPress }: ProductCardProps) {
  return (
    <Pressable onPress={onPress}>
      <Text>{name}</Text>
      <Text>¥{price.toLocaleString()}</Text>
    </Pressable>
  );
}

このコンポーネントを次に AI に編集させると、型を維持したまま追加実装してくれることが増えます。型は AI への暗黙のドキュメントとして機能します。

パターン2: useState の型推論ミス

useState(null) や useState([]) のような初期値だけだと、TypeScript は null 型や never[] 型と推論してしまい、後で値を入れた時に型エラーが噴出します。

// ❌ never[] と推論されて push できない
const [items, setItems] = useState([]);
setItems([...items, { id: 1, name: "コーヒー" }]); // 型エラー
 
// ❌ null しか入らないと推論される
const [user, setUser] = useState(null);
setUser({ name: "Masaki" }); // 型エラー

ジェネリクスで「これから何を入れるのか」を明示します。

// ✅ 入れたい型を最初に教える
type Item = { id: number; name: string };
const [items, setItems] = useState<Item[]>([]);
 
type User = { name: string } | null;
const [user, setUser] = useState<User>(null);

ここを直すと、画面遷移後の API レスポンス処理まで一気に型が通ることが多いです。状態関連で「画面が更新されない」という別の問題が出ていたら、Rork で state が更新されない・再描画されない時の対処法 も併せて確認してみてください。

パターン3: ライブラリ型定義の不整合(@types の欠落)

Expo や React Navigation のような大型ライブラリを Rork が組み込んだ時、対応する型定義パッケージが入っていないことがあります。VS Code の Problems パネルに「Could not find a declaration file for module '...'」と出ていたら、これが原因です。

# ❌ よくあるエラー
# Could not find a declaration file for module 'react-native-svg'
 
# ✅ 型定義をインストール(Expo SDK の管理下なら expo install を優先)
npx expo install react-native-svg
 
# 公式が型定義を内包していない古めのライブラリの場合
npm install --save-dev @types/lodash

Rork 上で動かしている場合は、プロンプトで「react-native-svg の型定義を含めて再構成して」と明示的に指示すると、expo install を含む手順を生成してくれます。

パターン4: ナビゲーション param 型の食い違い

React Navigation を使ったコードで一番厄介なのが、画面遷移パラメータの型エラーです。AI は画面ごとにバラバラな型を生成しがちで、navigate の引数で必ずエラーが出ます。

// ❌ 各画面で別々に型を書いていて整合性が取れない
type DetailParams = { productId: number };
navigation.navigate("Detail", { productId: "abc" }); // 数値と文字列でズレる

ルーター全体の param 型を1か所に集約します。

// ✅ ルートパラメータを単一の型として定義
export type RootStackParamList = {
  Home: undefined;
  Detail: { productId: number };
  Profile: { userId: string };
};
 
// 各画面はこの型を参照する
type DetailScreenProps = NativeStackScreenProps<RootStackParamList, "Detail">;
 
export function DetailScreen({ route, navigation }: DetailScreenProps) {
  const { productId } = route.params; // 型が一意に決まる
  return <Text>{productId}</Text>;
}

RootStackParamList を App.tsx の近くに置いておくと、Rork は次回の生成からこの型を参照するようになります。

パターン5: AI が as any でごまかしている時の直し方

最後に注意したいのが、何度も型エラーを直させると AI が as any で黙らせるパターンです。コンパイルは通りますが、本番でクラッシュする原因になります。

// ❌ AI が逃げに使うパターン
const data = (response as any).items.map((x: any) => x.name);

検索コマンドで as any の数を可視化して、計画的に削っていきます。

# プロジェクト全体の "as any" を数える
grep -rn "as any" src/ | wc -l
 
# 一覧で確認
grep -rn "as any" src/

代替として、API レスポンスは Zod や TypeScript の型ガードで安全に絞り込みます。

// ✅ Zod で実行時バリデーション + 型推論
import { z } from "zod";
 
const ItemSchema = z.object({ id: z.number(), name: z.string() });
const ResponseSchema = z.object({ items: z.array(ItemSchema) });
 
const parsed = ResponseSchema.parse(response);
const names = parsed.items.map((x) => x.name); // 型が string[] に確定

AI が再び as any を入れてきたら、プロンプトで「as any を使わずに型ガードで実装して」と明示するのが効きます。Rork の AI が以前のコードを上書きしてしまう挙動が気になる場合は、Rork の AI に既存コードを壊されない指示の出し方 も参考になります。

全体を振り返って — まず1ファイルだけ型を整える

5つのパターンを紹介しましたが、一度に全部直そうとすると挫折しやすいです。私のおすすめは、今いちばんよく触っている1ファイルだけを完璧に型付けすることです。そのファイルが「型のお手本」になり、AI は次の生成からそれに合わせてくれます。

useEffect 関連のエラーが TypeScript エラーと混在している場合は、Rork の useEffect 無限ループを解消するデバッグ手順 で根本原因を切り分けてから型を整えると、より早く安定状態に到達できます。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-08-14
Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す
Expo SDK 57 では expo prebuild が既定で ios と android を消してから再生成します。手編集を上げる前に洗い出す方法、config plugin への移し替え、57.0.9 で解消したメモリ回帰までを実務の順序でまとめました。