Image.resolveAssetSource's TypeScript declaration drops the null it returns for an unknown asset
Mantenedores costumam responder em até 2 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- react-native, typescript
- Domínio
- mobile
Direção de pesquisa
Leia types_generated/Libraries/Image/ImageTypes.flow.d.ts e compare o tipo de retorno de Image.resolveAssetSource com a declaração Flow em Libraries/Image/ImageTypes.flow.js e a implementação em Libraries/Image/resolveAssetSource.js. Atualize a declaração TypeScript para incluir o null retornado e, em seguida, confira a declaração gerada e seu comportamento de tipos usando o reproducer descrito na issue.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Clone https://github.com/YevheniiKotyrlo/react-native-typescript-declarations and run
yarn installinReproducerApp. It runs[email protected]with TypeScript 7.0.2. declarations/resolve-asset-source.tsreads theuriofImage.resolveAssetSource(assetId)once the result is notundefined. Runyarn check:resolve-asset-source, which type-checks it withstrict: true.- Run
yarn jest __tests__/resolveAssetSource-test.ts. Its first test checks thatImage.resolveAssetSource(123456)returnsnull; 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.
- Linguagem predominante
- C++
- Estrelas
- 127k
- Forks
- 25.4k
- Merge médio
- 1d 17h
- PRs com merge (30d)
- 34
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de react/react-native
-
Linking.getInitialURL() returns the task's first link after a link relaunches a reclaimed Android appTalvez já em andamento @YevheniiKotyrlo assumiu há 16 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
react/react-native#59006 · 2 comentários ·
Mantenedores costumam responder em até 2 dias
-
Fabric TextInput: prepareForRecycle leaves stale inputAccessoryViewButtonLabel (empty Done bar)Talvez já em andamento @jkasprzyk17 assumiu há 15 dias. AbertaNeeds: Author Feedback Needs: Repro
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
react/react-native#58952 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
[iOS][Fabric] TextInput drops a keystroke right after the first character typed into an empty field (_textOf:equals: compares attributes of a focused field)Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. AbertaNeeds: Attention Needs: Repro
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
react/react-native#58904 · 3 comentários ·
Mantenedores costumam responder em até 2 dias
-
Needs: Author Feedback Needs: Repro
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
react/react-native#58659 · 2 comentários ·
Mantenedores costumam responder em até 2 dias
-
Add TypeScript declaration for the performance globalTalvez já em andamento @Cedric921 assumiu há 26 dias. AbertaNeeds: Attention Needs: Repro
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
react/react-native#58610 · 5 comentários ·
Mantenedores costumam responder em até 2 dias
Todas as issues de react/react-native
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
ROCm/FastFlowLM#887 ·
Mantenedores costumam responder em até 1 dia
-
bug medium priority openmp tokenizer wrong result
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
good first issue invalid
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
DanielJerolm/gpcc#74 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
patrick-hudson/put.gd-desktop#808 ·
Mantenedores costumam responder em até 1 dia
-
DPI change is not fully handled in the cascading window on WindowsTalvez já em andamento @yukawa assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
Mantenedores costumam responder em até 4 dias