Microsoft/TypeScript

Error elaboration says nothing due to circularity

オープン

#54,921 opened on 2023/07/07

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (13,395 件のフォーク)batch import
Experience EnhancementHelp WantedSuggestion

Repository metrics

Stars
 (108,860 個のスター)
PR merge metrics
 (PR metrics pending)

説明

Bug Report

⏯ Playground Link

Playground link with relevant code

💻 Code

// @target: esnext

export interface ReadonlySparseArray<T> {

    slice(start?: number, end?: number): SparseArray<T>;
  
    every<S extends T>(
        predicate: (value: T, index: number) => value is S,
    ): this is ReadonlySparseArray<S>;
  
    flatMap<U>(callback: (value: T, index: number) => U | readonly U[] | ReadonlySparseArray<U>): U[];
  }
  
export interface SparseArray<T> extends ReadonlySparseArray<T> {}

const _a: ReadonlySparseArray<string> = ['a'];
const _b: SparseArray<string> = ['a'];

🙁 Actual behavior

_b:

Type 'string[]' is not assignable to type 'SparseArray<string>'.
  Types of property 'slice' are incompatible.
    Type '(start?: number | undefined, end?: number | undefined) => string[]' is not assignable to type '(start?: number | undefined, end?: number | undefined) => SparseArray<string>'.ts(2322)

In trying to tell you why string[] is not assignable to SparseArray<string>, the elaboration references two signatures which are identical except for their return types: string[] and SparseArray<string>, which lands you right back where you started.

This particular example occurs in #50351, which is a separately buggy behavior, so this repro may stop reproing if that gets fixed.

コントリビューターガイド