Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open Beginner friendly
#59,648 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
react-native, typescript
Domain
mobile

Research direction

Read types_generated/Libraries/Image/ImageTypes.flow.d.ts and compare its return type for Image.resolveAssetSource with the Flow declaration in Libraries/Image/ImageTypes.flow.js and implementation in Libraries/Image/resolveAssetSource.js. Update the TypeScript declaration to include the returned null, then check the generated declaration and its type behavior against the reproducer described in the issue.

Written by the indexing model from the issue text.

Description

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.

Dominant language
C++
Stars
127k
Forks
25.4k
Avg merge
1d 17h
Merged PRs (30d)
34

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from react/react-native

All issues in react/react-native

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.