microsoft / microsoft/TypeScript

Unable to infer parameters for generic constructor/functions with a distributive conditional type

Aberta
#62,079 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Bug Domain: Conditional Types Help Wanted
Linguagem predominante
Go
Estrelas
111k
Forks
14.3k
Merge médio
2d 4h
PRs com merge (30d)
132

Descrição

🔎 Search Terms

generic constructor, generic function, branded string, ConstructorParameters, Parameters, unable to infer.

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

https://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBAbwL4G4CwAoTBLAdjYKAMwEMBjYOAfQFkSxFM44iIIAuROEzgRgCYAzHCSZRWDDACeYSjQgATAK4AbYAGUlAIwAqMygF44AIi0koxuADIuWqCVwLOMKEsqpMmabLh0GR2nprOAAlYDJoBQAeeWU1TV19ABpbFRIAC04AZxc8AHMRAD5PSX04BL1ZAHFgGCimcu1KylACRyy4HKh8pIa-OFbgdtDwyKiK5LglXABrXAgAd1xC3oxCuCMJn0Hh6bnF3EwAfi5vYCPOLfdgvwBtK4BdTE5cYAA3QnQJAHpvuB10tgOkC4DB0pQALYQHKdFwkbB5dIwVhQBbmBRwNFSOAASTgZAcLARSiglAgSngMAg+IgEMoVNBgOBWSybnYXjKOmAOQACuYSHSCFAOkY+fZBYQslEojoBiA2goOsZWBBLAAfXyKVQaJr6QoACnMeUuuuqtRlKT8hQAlBt1m8INgFMUML9mHAAHonV4fKAlN146AIvAkFQqbFDCLTIXADHYeALePpbj4tIsuAqbAzelM9kYBThNKk1MkdNcnIyuUKpUq9WauI6xKydYIBoRXBdJRkKlQQ1QY2NJvAGp1HSW+g2r7iDk+cswADCEA7Li7PbFAtqko2cEXy9c3eg64lwqiZwgRH+3JghS+buYXrgPsIQA

💻 Code
export {};

interface _Map {
  foo: { a: 123 }
}

type ModuleSubType = "bar" & { brand: true };

type Map = _Map & Record<ModuleSubType, { blah: string }>

type SubTypeGet<
  SubType extends string,
  Map extends Record<SubType, unknown>,
> = SubType extends unknown
? { type?: SubType } & Map[SubType]
: never;

// This is the most straightforward way I can figure out to come to this issue:
type TestParameters = Parameters<<T extends "foo" | ModuleSubType>(arg: SubTypeGet<T, Map>) => void>
//   ^? never

// I originally encountered it with a class like this:
declare class Test<T extends "foo" | ModuleSubType> {
  constructor(arg: SubTypeGet<T, Map>);
}

type TestConstructorParameters = ConstructorParameters<typeof Test>;
//   ^? never
🙁 Actual behavior

Parameters fails to infer anything.

🙂 Expected behavior

Parameters should infer something, probably [arg: { type?: ModuleSubType | undefined; } | ({ type?: "foo" | undefined; } & { a: 123; })] as it would if the function/class were instantiated.

Additional information about the issue

No response

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Use a reprodução vinculada do Playground como primeiro ponto de entrada; inspecione como os tipos condicionais distributivos fluem por Parameters e ConstructorParameters nos exemplos de função genérica e construtor. Está concluído quando ambos os utilitários inferirem uma tupla de parâmetros diferente de never, consistente com o comportamento esperado, e a reprodução existente deixar de falhar.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
typescript
Domínio
compilers
Tipo de issue
Bug
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.