microsoft / microsoft/TypeScript

Intellisense does not work with [P in keyof T]

Aberta
#13,701 0 comentários 2 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Experience Enhancement Suggestion
Linguagem predominante
Go
Estrelas
111k
Forks
14.3k
Merge médio
2d 4h
PRs com merge (30d)
132

Descrição

TypeScript Version: 2.1.5

Code

//Operators available for the object fields
export type Operators<T> = {
    $elementMatch?: T | Operators<T>;
    $in?: T[];
}

//Filter declaration. 
export type Filter<T> = {
    //field, you can assign a value, or an operator.
    [P in keyof T]: Operators<T[P]> | T[P];
}

function query<T>(filter: Filter<T>) {  }

//Sample class
class Sample {
    foo: string;
    bar: number;
}

query<Sample>({
    //We want to put on the "foo" operator "$in"
    value: {
        //Intellisense then no output
    }
});



Expected behavior:
Intellisense should display all available options.
For example:
$elementMatch
$in

Actual behavior:
Intellisense does not offer anything.
If the "[P in key of T]" is replaced by "[key: string]", then the Intellisense for operators begins to work, but in this case we lose the test fields.

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

Reproduza a falha do IntelliSense usando o exemplo do TypeScript 2.1.5 com Operators, Filter e query. Comece rastreando o tratamento de conclusão para o tipo mapeado [P in keyof T]; a tarefa estará concluída quando as opções $elementMatch e $in aparecerem dentro do objeto de operadores sem perder as verificações dos campos mapeados.

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

Avaliação

Stack de tecnologia
typescript
Domínio
developer-experience
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

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