镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Record keys are inferred to be values when using extends string conditional in a generic type #53343

Description

@dk1a

Bug Report

🔎 Search Terms

inference generic extends record

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about "extends"

⏯ Playground Link

Playground link with relevant code

💻 Code

type TestType<Keys extends string> = string extends Keys ? Record<Keys, string> : Record<Keys, string>

function inferHelper<Keys extends string>(data: TestType<Keys>) {
  return data;
}

export const a = inferHelper({
  // key1 is inferred to be value1 here
  key1: "value1"
})

🙁 Actual behavior

ts2345

Argument of type '{ key1: string; }' is not assignable to parameter of type 'Record<"value1", string>'.
  Object literal may only specify known properties, and 'key1' does not exist in type 'Record<"value1", string>'

🙂 Expected behavior

no error, and the record is inferred as Record<"key1", string>

Activity

  1. RyanCavanaugh commented on Mar 23, 2023

    @RyanCavanaugh
    Member

    3.8 -> 3.9 regression, actually

  2. typescript-bot commented on Mar 23, 2023

    @typescript-bot
    Contributor

    The change between origin/release-3.6 and origin/release-4.0 occurred at 47b60ec.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScriptDomain: check: Type InferenceRelated to type inference performed during signature resolution or `infer` type resolutionRescheduledThis issue was previously scheduled to an earlier milestone

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions