Je pense que c'est un bug dans Typescript et je l'ai classé comme un problème here. Je ne m'y attendais pas à fixer (au moins pas de sitôt, alors je veux vous demander les gars, quelqu'un arrive d'avoir une idée pour une meilleure solution/travail autour de create_1?Les définitions de type récursives ne semblent pas fonctionner avec les génériques?
code
type RecursivePartial<T> = {
[P in keyof T]?: RecursivePartial<T[P]>;
};
type State<T> = { value: T };
function create_1<T>(){
let _x: RecursivePartial<State<T>>;
let _y: State<RecursivePartial<T>>;
_x = _y;
}
function create_2<T>(){
/*
*/
let x: RecursivePartial<State<T>>;
let y: State<T>;
/*
Type 'State<T>' is not assignable to type RecursivePartial<State<T>>'.
Types of property 'value' are incompatible.
Type 'T' is not assignable to type RecursivePartial<T>[P]>'.
Type 'T[string]' is not assignable to type 'RecursivePartial<T[P]>'.
*/
x = y;
}
comportement attendu:. je ne m'y attendais le second exemple être dactylographiée valide, à savoir l'Etat devrait être cessible à RecursivePartial> Cela devrait être le cas que tout Etat serait une partie de celui-ci l'auto donné T est le même type
Comportement réel: Je reçois une erreur de type (voir ci-dessus), il semble que la définition de type récursive se brise quand elle rencontre un générique?
TS Playground link Le code et l'erreur de type peuvent être confirmés ici; ts-playground example
Comme l'information: Sur la base des documents de la version actuelle 2.4 Types Recusive ne sont pas autorisés pour le type Alias https://www.typescriptlang.org/docs/handbook/advanced-types.html « Toutefois, il est impossible pour une tapez alias pour apparaître n'importe où ailleurs sur le côté droit de la déclaration ... " – Magu
@Magu, je ne pense pas que ce soit pertinent ici; le type récursif ne se mentionne que dans une propriété, ce qui est autorisé. (Le fait que le type compile sans erreur est une indication que tout va bien). L'étrangeté ici a à voir avec la vérification de type. – jcalz
@tugend, je ne vois pas cette erreur sur la version 2.5.0-dev.20170627 de tapuscrit que j'utilise. Peut-être que c'est corrigé? Pas en mesure de le localiser pour l'instant – jcalz