Skip to content

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

@dk1a

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>

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptDomain: check: Type InferenceRelated to type inference performed during signature resolution or `infer` type resolutionFix AvailableA PR has been opened for this issueRescheduledThis 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