Microsoft/TypeScript

A[] form works, but Array<A> breaks

Open

#45,641 创建于 2021年8月30日

在 GitHub 查看
 (3 评论) (0 反应) (0 负责人)TypeScript (6,726 fork)batch import
BugDomain: check: Type CircularityEffort: ModerateHelp Wanted

仓库指标

Star
 (48,455 star)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 9 个 PR)

描述

Bug Report

🔎 Search Terms

site:github.com inurl:/microsoft/TypeScript/issues/ Array [] normalization syntactic sugar

🕗 Version & Regression Information

This works in 3.9.7, broke in 4.0.5, and remains broken in Nightly.

  • This changed between versions 3.9.7 and 4.0.5

⏯ Playground Link

Playground link with relevant code

💻 Code

type R<C> = [C, ...R<C>[]] | number;      // works, as expected
type S<C> = [C, ...Array<S<C>>] | number; // fails unexpectedly - should work identically

const r: R<"add"> = ["add", 2, 1];
const s: S<"add"> = ["add", 2, 1];

🙁 Actual behavior

The A[] form in the first line works, but the otherwise-identical Array<…> form on the second line breaks with the warning Type alias 'S' circularly references itself.(2456).

🙂 Expected behavior

Both of these should work, and behave identically, as they are merely syntactic sugar for each other.

贡献者指南