[RFC] tsconfig 是否应该开启 strict 或 strictNullChecks

オープン
#423 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

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

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
リファクタリング
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
typescript
領域
build-system

調査の方向性

まず、リポジトリの tsconfig と useMergedState.ts の例を確認します。特に、19行目付近のジェネリック宣言と、60行目あたりから始まる effect を重点的に確認してください。コンテキストとしてリンク先の pro-components issue を確認したうえで、strict または strictNullChecks を有効にすることが適切かどうかを判断し、その結果としての型安全性の受け入れ基準を定義してください。

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

説明

WHY:不开启strictNullChecks的话会忽略所有的 null 和 undefined

举个例子:

useMergedState 中接受了泛型T作为内部的 innerValue 类型,但根据 L60 开始的代码

  // Sync value back to `undefined` when it from control to un-control
  useLayoutUpdateEffect(() => {
    if (!hasValue(value)) {
      setInnerValue(value);
    }
  }, [value]);

实际上 innerValue 的类型是T | undefined,因为没有开启 strictNullChecks 导致没有警告

该函数使用中,需要显性去指定泛型为 T | undefined 才能获取到实际正确的类型,如:

const [v] = useMergedState<string[]>(...) => const [v] = useMergedState<string[] | undefined>(...)

前者的写法,v的类型会忽略 undefined类型,导致后续编码产生错误

以上为我在debug该issue时发现: https://github.com/ant-design/pro-components/issues/6652

个人见解,欢迎讨论😁

主要言語
TypeScript
スター
670
フォーク
205
平均マージ
15日 17時間
マージ済み PR(30日)
6

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

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

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

react-component/util のほかの issue

react-component/util の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

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

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