Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Image.resolveAssetSource's TypeScript declaration drops the null it returns for an unknown asset

オープン 初心者向け
#59,648 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 2 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
react-native, typescript
領域
mobile

調査の方向性

types_generated/Libraries/Image/ImageTypes.flow.d.tsを読み、Image.resolveAssetSourceの戻り値の型を、Libraries/Image/ImageTypes.flow.jsのFlow宣言およびLibraries/Image/resolveAssetSource.jsの実装と比較してください。返されるnullを含めるようTypeScript宣言を更新し、その後、issueに記載された再現例を使って生成された宣言とその型の動作を確認してください。

索引モデルが issue の本文から書いたものです。

説明

Description

Image.resolveAssetSource returns null for an asset id the asset registry does not hold (resolveAssetSource.js L118-L121), and its Flow type says so: resolveAssetSource(source: ImageSource): ?ImageResolvedAssetSource (ImageTypes.flow.js L62). The generated TypeScript declaration, types_generated/Libraries/Image/ImageTypes.flow.d.ts, declares it as returning ImageResolvedAssetSource | undefined, without the null. TypeScript code that rules out undefined therefore type-checks and then throws on the null the function returns.

Steps to reproduce
  1. Clone https://github.com/YevheniiKotyrlo/react-native-typescript-declarations and run yarn install in ReproducerApp. It runs [email protected] with TypeScript 7.0.2.
  2. declarations/resolve-asset-source.ts reads the uri of Image.resolveAssetSource(assetId) once the result is not undefined. Run yarn check:resolve-asset-source, which type-checks it with strict: true.
  3. Run yarn jest __tests__/resolveAssetSource-test.ts. Its first test checks that Image.resolveAssetSource(123456) returns null; its second calls the function from step 2 with that id.

Expected: step 2 reports 'resolved' is possibly 'null', since the function can return null.
Seen: step 2 passes with no errors, the first test of step 3 passes, and the second throws TypeError: Cannot read properties of null (reading 'uri'). 0.88.1 declares the same ImageResolvedAssetSource | undefined.

React Native Version

0.88.1, and 0.89.0-nightly-20261029-25b05acd7

Affected Platforms

Other (please specify)

Output of npx @react-native-community/cli info
System:
  OS: Windows 11 10.0.26300
Binaries:
  Node:
    version: 26.12.1
  Yarn:
    version: 1.22.22
npmPackages:
  "@react-native-community/cli":
    installed: 20.2.0
    wanted: 20.2.0
  react:
    installed: 19.3.0
    wanted: 19.3.0
  react-native:
    installed: 0.89.0-nightly-20261029-25b05acd7
    wanted: 0.89.0-nightly-20261029-25b05acd7

The defect is in the published TypeScript declarations, so it shows on every platform; the reproducer runs tsc and Jest.

Stacktrace or Logs
$ yarn check:resolve-asset-source
(no output; tsc exits 0)

$ yarn jest __tests__/resolveAssetSource-test.ts
FAIL __tests__/resolveAssetSource-test.ts
  √ resolveAssetSource returns null for an asset id the registry does not hold (104 ms)
  × code the declaration accepts reads uri of that null (7 ms)

  ● code the declaration accepts reads uri of that null

    expect(received).not.toThrow()

    Error name:    "TypeError"
    Error message: "Cannot read properties of null (reading 'uri')"

          5 | export function uriOf(assetId: number): string {
          6 |   const resolved = Image.resolveAssetSource(assetId);
        > 7 |   return resolved !== undefined ? resolved.uri : 'missing';
            |                                            ^
          8 | }
          9 |
MANDATORY Reproducer

https://github.com/YevheniiKotyrlo/react-native-typescript-declarations

Screenshots and Videos

None: the failure is the type checker's and Jest's output above.

主要言語
C++
スター
127k
フォーク
25.4k
平均マージ
2日 1時間
マージ済み PR(30日)
67

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

react/react-native のほかの issue

react/react-native の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。