Microsoft/TypeScript

Error elaboration says nothing due to circularity

Open

#54,921 opened on 2023幎7月7日

GitHub で芋る
 (0 comments) (0 reactions) (0 assignees)TypeScript (6,726 forks)batch import
Experience EnhancementHelp WantedSuggestion

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

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.

コントリビュヌタヌガむド