microsoft / microsoft/TypeScript

Inconsistent boolean literal types in objects

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

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

Bug Domain: check: Type Inference Help Wanted
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
1日 19時間
マージ済み PR(30日)
117

説明

🔎 Search Terms

boolean invariant type parameter literal widen union

🕗 Version & Regression Information
  • This is the behavior in every version I tried
⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.7.0-dev.20240824&ssl=14&ssc=130&pln=1&pc=1#code/PTAECEHsA8B4BUB8oAuBPADgU1ASwM54B2AbgIYBOuZRKxo8AsAFAvrYQwLIC8oA3i1CgA5lhQAuUAAoAlKB7J4AbiGh84qdPIAbAK5Yp8eYtAlIuACarmAXxstLWAMY7KOAGZ6izlLkhEoABGXEjaZPqGDLJSUHBIDszOAfh0QUQAjArBMNL8oBgUkBhSAAygtrLKoCCccPmFxVJEegC2QVgUFYgsyUSpwUQATLFcDUUloC3tnd3ZIdB5BRNlFVU1YADyANYsvSlpQVl8C0uNkx4RGmvVtXGw4005kDpYNN37-YcjdQ-LTyEXm9ArZeDlFo8LlccJVbmAAKIUIoUAA04L+5yklx011BU0gdDI+HwuBERDIQVeqEgv0hUkBr3eoJYQA

💻 Code
// Box<T> type is invariant in T

type Box<T> = {
  get: () => T;
  set: (value: T) => void;
};

declare function box<T>(value: T): Box<T>;

const bn1 = box({ prop: 0 }); // Box<{ prop: number }>
const bn2: Box<{ prop: number }> = box({ prop: 0 }); // Ok

const bb1 = box({ prop: false }); // Box<{ prop: boolean }>
const bb2: Box<{ prop: boolean }> = box({ prop: false }); // Error, box<{ prop: false }> not assignable to Box<{ prop: boolean }>
🙁 Actual behavior

Error on bb2 is surprising and inconsistent with lack of error on bn2.

🙂 Expected behavior

Expected the box(false) expression to have type Box<boolean> for both bb1 and bb2.

Additional information about the issue

This issue is a small variation of https://github.com/microsoft/TypeScript/issues/48363 that was fixed by @ahejlsberg in https://github.com/microsoft/TypeScript/pull/48380

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

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

はじめの一歩

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

調査の方向性

リンクされている TypeScript Playground から始め、数値の Box の例と boolean の Box の例の違いを再現してください。示されている不変な Box 宣言について、型推論と代入可能性の挙動を追跡してください。boolean のケースが数値のケースと一貫して動作し、その例に対するリグレッションカバレッジがあることを完了条件とします。

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

評価

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

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

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