sinclairzx81 / typebox

Json Schema Type Builder with Static Type Resolution for TypeScript
Other
4.85k stars 155 forks source link

Revision 0.32.20 #810

Closed sinclairzx81 closed 6 months ago

sinclairzx81 commented 6 months ago

This PR resolves a TypeScript compiler regression that occurred in between TS 5.3.3 -> 5.4.2. The issue seems isolated to the value/delta/... modules where the inferred TSchema types were emitting with basePath relative src/... paths, and not the relative module path.

// TS 5.3.3 - correct
export type Update = Static<typeof Update>;
export declare const Update: import("../../type/object/object.mjs").TObject<{
    type: import("../../type/literal/literal.mjs").TLiteral<"update">;
    path: import("../../type/string/string.mjs").TString;
    value: import("../../type/unknown/unknown.mjs").TUnknown;
}>;

// TS 5.4.2 - incorrect
export type Update = Static<typeof Update>;
export declare const Update: import("src/type/object/object.mjs").TObject<{
    type: import("src/type/literal/literal.mjs").TLiteral<"update">;
    path: import("src/type/string/string.mjs").TString;
    value: import("src/type/unknown/unknown.mjs").TUnknown;
}>;

This PR resolves the problem by explicitly importing the types using the correct path. Comments have been left to review the compiler behavior in subsequent revisions. It may also be worth introducing post build type assertions on top of the ESM module asserts (for consideration), but would prefer to trust compiler emit.

Fixes https://github.com/sinclairzx81/typebox/issues/808

mikicho commented 6 months ago

Thanks for the quick response!!