microsoft / microsoft/TypeScript

Incorrect type inference for Record with symbol key

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

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

In Discussion Suggestion
主要言語
Go
スター
111k
フォーク
14.3k
平均マージ
1日 19時間
マージ済み PR(30日)
117

説明

TypeScript Version: Nightly

Search Terms: Record, Symbol, symbol as index

Code

export type SN = Record<symbol, number>

const s = Symbol()
const sn: SN = {}

const n = sn[s] // n is of type any instead of number

Expected behavior:

A Record with symbols as key should allow to access properties by symbol with correct type

Actual behavior:

All keys are any type.

Playground Link: http://www.typescriptlang.org/play/?noImplicitAny=false&strictNullChecks=false&strictFunctionTypes=false&strictPropertyInitialization=false&strictBindCallApply=false&noImplicitThis=false&noImplicitReturns=false&alwaysStrict=false&ts=3.9.0-dev.20200308#code/KYDwDg9gTgLgBDAnmYcDKA5OBeOAlYAY2gBMAeAZ0QFsAjCAGwBo4A7AVzuCgD4AoPsVYV4FHOhr0GACgCUgiMNGsAXOiy4A3gF8BQkW3EVWAbQoBdIA

Related Issues: #1863

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

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

はじめの一歩

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

調査の方向性

TypeScript Nightly playground または示されている TypeScript バージョンを使って issue の例を再現し、その後、コンパイラーが Record<symbol, number> へのインデックスアクセスをどのように処理しているかを追跡します。sn[s] の推論される型と期待される number を比較し、関連する issue #1863 をコンテキストとして使用します。symbol をキーとする Record へのアクセスが any ではなく number として推論され、例をカバーする回帰テストがある状態を完了とします。

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

評価

技術スタック
typescript
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
45/100

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

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