Infer method name for parameter decorator
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 30/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- typescript
- Domaine
- compilers
Piste de recherche
Commencez par reproduire les exemples de décorateurs dans le TypeScript Playground lié, y compris la définition de InjectLike et sa référence à __playground.ts. Suivez la manière dont le nom de méthode générique, l’index du paramètre et le type cible sont inférés ; le travail est terminé lorsque @Parameter() génère une erreur sur another_method(), tandis que l’utilisation valide de @Inject est acceptée et que le mismatch de constructeur marqué est rejeté.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
TypeScript Version: 3.3.3
Tried with @next (3.4.0-dev.201xxxxx) ? NO
Search Terms: type:issues infer method name parameter decorator
Code
declare function Method():
{
(t: any, m: 'method'): void;
}
declare function Parameter():
{
(t: any, m: 'method', i: number): void;
}
class Play
{
@Method() // err
public another_method ( @Parameter() /* NO ERROR */ test: number ): void
{
throw new Error('Not yet implemented');
}
@Method()
public method ( @Parameter() test: number ): void
{
throw new Error('Not yet implemented');
}
}
Expected behavior: @Parameter() should error just as @Method() when applied to another_method() because the m parameter is typed "method" (which should reduced the set of method). i.e method name should be enforced.
Actual behavior: No error
Playground Link: https://typescript-play.js.org
Use case :
I crafted a type that filters method names with the nth parameters iff that parameters is of the given type T.
See KeysToTypedNthParameter definition here
let hash = {
a( _0: string, _1: string ) {},
b( _0: string, _1: number ) {},
c( _0: number, _1: number ) {},
d( _0: number, _1: string ) {},
}
let string_0: KeysToTypedNthParameter<0, string, typeof hash>; // "a" | "b"
let string_1: KeysToTypedNthParameter<1, string, typeof hash>; // "a" | "d"
let number_0: KeysToTypedNthParameter<0, number, typeof hash>; // "c" | "d"
let number_1: KeysToTypedNthParameter<1, number, typeof hash>; // "c" | "d"
Later, I used that type to infer method name for my parameter decorator - @Inject - in the excerpt below, I marked the ONLY line that should error and why (but both lines actually error)
class Test
{
public blatantly!: boolean;
}
class Play
{
public method(
@Inject({ type: Test })
@Inject({ type: Number }) // err (construtor mismatch instance type)
test: Test,
): void
{
throw new Error( 'Not yet implemented' );
}
}
Play;
Here is @Inject decorator definition and complete code -
const Inject: InjectLike = void 0 as unknown as InjectLike;
interface InjectLike
{
<
C extends ConstructorLike,
>
({}: { type: C }): {
<
// FIXME : not enough to infer the method name - see ./__playground.ts#
M extends ( T extends ConstructorLike ? never : KeysToTypedNthParameter<I, InstanceType<C>, T> ),
I extends number,
T,
>
( target: T, member: M, index: I ): void;
};
}
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/TypeScript
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
microsoft/TypeScript#64322 · 2 commentaires · 1 réaction · 2 personnes assignées ·
-
Possible Improvement
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/TypeScript#64278 · 1 commentaire · 1 réaction ·
-
Docs
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
microsoft/TypeScript#64118 · 1 commentaire ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
microsoft/TypeScript#64094 ·
-
Docs
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
microsoft/TypeScript#63959 · 5 commentaires ·
Toutes les issues de microsoft/TypeScript
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
milvus-io/birdwatcher#545 ·
-
kind/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
kubernetes-sigs/prow#953 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
caddyserver/caddy#8046 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
jaegertracing/jaeger#9588 ·