如何通过编程方式判断TypeScript(AST)类型是否相等?
实现TypeNode与扁平化TypeLiteral的相等判断工具
我正在开发一个工具,用来判断TypeScript的TypeNode是否与给定的扁平化TypeLiteral相等,具体示例如下:
// type ABC = { a: number; b: number; c: number; }; const typeABC: ts.TypeAliasDeclaration = ...; isEqual(typeABC, "{a: number; b: number; c: number; }") // 返回true // Pick<ABC, "a" | "b">; const typeAB: ts.TypeReferenceNode = ...; isEqual(typeAB, "{ a: number; b: number; }") // 返回true // type BC = { b: number; } & { c: number; }; const typeBC: ts.IntersectionTypeNode = ...; isEqual(typeBC, "{ b: number; c: number }"); // 返回true
我之前试过用ts.createPrinter打印类型后对比字符串,但这个方法只能输出类型的原始实现,没法得到扁平化后的类型(类似type Flatten<T> = T extends {} ? { [k in keyof T]: T[k] } : T;这种展开后的结果)。
因为TypeScript Playground满足不了需求,我创建了一个StackBlitz复现示例。
内容的提问来源于stack exchange,提问作者Eliya Cohen
相关产品推荐
相关产品推荐

