Tôi đã hiểu rằng một cái gì đó như:
type GenericExample<T> = T extends (infer U) ? U : 'bar';
bằng:
type GenericExample<T> = T extends T ? T : 'bar';
Nhưng khi mọi thứ trở nên phức tạp hơn, TypeScript phàn nàn:
type Types = 'text' | 'date' | 'articles' | 'params';
type MyExperiment<Type extends Types> = { t : Type };
type MyExperimentsUnion = Types extends (infer U) ? MyExperiment<U> : never;
// Type 'U' does not satisfy the constraint 'Types'.
// Type 'U' is not assignable to type '"params"'.
Vì vậy, tôi muốn hỏi tại sao điều này là sai: trong trường hợp cụ thể này, sự phân phối trên liên minh sẽ diễn ra, vì vậy U
loại suy ra nên text
, sau đó date
và vân vân. Vì vậy, những gì T extends (infer U)
thực sự có nghĩa là gì và khi nào nó sẽ thích hợp để sử dụng nó?
infer
từ khóa, nhưng tôi đã hỏi câu hỏi kỳ lạ này bởi vì tôi phát hiện ra nóT extends (infer U)
có giá trị trong một loại điều kiện, tôi đã ngạc nhiên về điều đó và tôi bắt đầu điều tra.