angular / angular/angularfire

The convience observables provided by the Auth module are no longer type safe

オープン
#3,541 コメント 3 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
TypeScript
スター
7.8k
フォーク
2.2k
平均マージ
22時間 28分
マージ済み PR(30日)
6

説明

### Version info
Angular CLI: 18.0.2
Node: 22.2.0
Package Manager: npm 10.8.0
OS: linux x64

Angular: 18.0.1
... animations, common, compiler, compiler-cli, core, fire
... forms, platform-browser, platform-browser-dynamic, router

Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1800.2
@angular-devkit/build-angular 18.0.2
@angular-devkit/core 18.0.2
@angular-devkit/schematics 18.0.2
@angular/cli 18.0.2
@schematics/angular 18.0.2
rxjs 7.8.1
typescript 5.4.5
zone.js 0.14.6

### How to reproduce these conditions

**Failing test unit, Stackblitz demonstrating the problem**
n/a

**Steps to set up and reproduce**
- Create a new angular app using the latest version of the cli
`ng new angular18-firebase-test`
- Add AngularFire
`ng add @angular/fire`
- Follow the guidance [here](https://github.com/angular/angularfire/blob/master/docs/auth.md#convenience-observables) to add the convenience observables

**Sample data and security rules**
n/a

### Debug output

** Output from `firebase.database().enableLogging(true);` **
n/a

** Screenshots **
![typing-issue](https://github.com/angular/angularfire/assets/9328862/610748f5-62f6-4e9e-a485-d1ec4f19a5b5)

### Expected behavior
The convenience observables should be properly typed as they were in **v17.1.0**
Note in this screenshot how the IDE properly recognizes the types when using the previous release:
![properly-typed](https://github.com/angular/angularfire/assets/9328862/f24a193d-277e-4d71-b553-be56e46745b1)

### Actual behavior
The observables are cast as `any` (see screenshot).

_Edit 1_
Upon further investigation, it appears the problem is related to how the `rxfire/auth` module in this file is imported. Following the import through to the definition of the module takes me to a type definition file in **v17** but instead goes to an esm module in **v18**. See related screenshot here:
![imports](https://github.com/angular/angularfire/assets/9328862/6bc66bdf-2901-4389-8477-4bcab2940b61)
Still unsure why this is happening.

_Edit 2_
Eureka! It appears in [this commit](https://github.com/angular/angular-cli/commit/f452589e2c921448b76a138a5f34ba92ad05e297) the AngularCLI now defaults to setting the `moduleResolution` compiler option in the `tsconfig.json` file to `"bundler"` by default thus causing the module to get resolved differently. Switching back to the value of `"node"` allows for the proper import of typed entities but likely causes problems with the areas targeted in that aforementioned commit.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

docs/auth.md に記載されている利便性用 observable から始め、Auth モジュールで使用されている rxfire/auth の import を追跡します。Angular CLI 18 の tsconfig.json における moduleResolution "bundler" での解決を v17.1.0 およびリンク先の Angular CLI commit と比較します。完了の条件は、現在のセットアップで observable が期待される型を維持することです。

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

評価

技術スタック
angular, firebase, typescript
領域
authentication, developer-experience
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

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

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