Element implicitly has an 'any' type because expression of type 'string' can't be used to index type

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

@weswigham がすでに取り組んでいます。

2021年6月2日 から。

評価

この issue はまだ評価されていません。

説明

Needs Investigation Rescheduled

Bug Report

The following code used to work on 4.2.3, but does not build with 4.3.2, reporting the error on the last line

type ObjectFixedKeys<T extends object> = {
    [K in keyof T]: string extends K ? never : K
} extends { [_ in keyof T]: infer U }
    ? U
    : never

type DistributeKeysUnion<U> = U extends string
    ? { [K in U]: any }
    : never

type ObjectDictionaryKeys<T extends object> = Exclude<
    T,
    DistributeKeysUnion<ObjectFixedKeys<T>>
    >

type Condition = { $and: Array<Condition> }
    | { $or: Array<Condition> }
    | { [member: string]: string }

type O = ObjectFixedKeys<Condition>
type D = DistributeKeysUnion<ObjectFixedKeys<Condition>>

declare const s: string
type CT = ObjectDictionaryKeys<Condition>
declare const ct : CT
const h = ct[s]

Error:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'CT'.
  No index signature with a parameter of type 'string' was found on type 'CT'.
🕗 Version & Regression Information

I tracked the regression to the version 4.3.0-dev.20210422

Probably related to https://github.com/microsoft/TypeScript/commit/8ea4ec94967c9db8542ca229dedd656fe9e051df

⏯ Playground Link

Playground link with relevant code

Note how the last line is evaluated to never, however if you select version 4.2.3 it gets evaluated to "foo" | "bar" as expected.

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

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

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

はじめの一歩

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

microsoft/TypeScript のほかの issue

microsoft/TypeScript の issue をすべて見る

似ている issue

Go の issue をもっと見る

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

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