microsoft / microsoft/TypeScript

Parameters created from tuple are treated as mutable instead of immutable, unless written as "...args"

オープン
#53,255 コメント 4 件 リアクション 2 件 担当者 1 名 GitHub で見る

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

2023年3月14日 から。

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

説明

Bug Report

🔎 Search Terms

const array tuple parameter spread

🕗 Version & Regression Information
  • This is the behavior in every version I tried,.
⏯ Playground Link

Playground Link

💻 Code
declare function each<T extends ReadonlyArray<any>>(cases: ReadonlyArray<T>): (fn: (...args: T) => any) => void;

const cases = [
    [1, '1'],
    [2, '2'],
] as const;

const eacher = each(cases);

// Error.
eacher((a, b) => {
});

// No error?
eacher((...args) => {
    const [a, b] = args;
});

🙁 Actual behavior
Argument of type '(a: 1 | 2, b: "1" | "2") => void' is not assignable to parameter of type '(...args: readonly [1, "1"] | readonly [2, "2"]) => any'.
  Types of parameters 'a' and 'args' are incompatible.
    Type 'readonly [1, "1"] | readonly [2, "2"]' is not assignable to type '[a: 1 | 2, b: "1" | "2"]'.
      The type 'readonly [1, "1"]' is 'readonly' and cannot be assigned to the mutable type '[a: 1 | 2, b: "1" | "2"]'.(2345)

Obviously they're not assignable, but why did we come up with [a: 1 | 2, b: "1" | "2"] and not readonly [a: 1 | 2, b: "1" | "2"]?

🙂 Expected behavior

No error, as though it had been expanded separately.

See also: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/64739

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

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

はじめの一歩

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

評価

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

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

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