RFCs
RFCs copied to clipboard
Expand the `header` flag in the JS Backend to produce a d.ts file.
Abstract
By leveraging on the existing mechanisms in the compiler, produce a d.ts file when the header flag is used. This file will be a header containing all the definitions exported in the Nim code. Just like the existing header works for the C/C++ backends.
Motivation
No response
Description
The main motivation is to improve the ergonomics of js/ts interop by providing type information that IDEs can use.
Code Examples
type
UserProfile* {.exportc.} = object
id* : int
firstName*, lastName*, email*, phone*, country*, pictureUrl* : cstring
proc createDefaultUserProfile*(): UserProfile {.exportc.} =
UserProfile()
proc getFullname*(profile: UserProfile): cstring {.exportc.} =
formatFullName(profile)
Would produce:
export declare type UserProfile = {
id : number;
firstName : string;
lastName : string;
email : string;
phone : string;
country : string;
pictureUrl : string;
};
export declare function createDefaultUserProfile(): UserProfile;
export declare function getFullName(profile: UserProfile): string;
Backwards Compatibility
No response
TS has become such a big target that it is worth supporting it somehow for the future of Nim.
Would love to see this. I've got a large TS project and being able to write nim and have it "just work" without having to manually declare types would be amazing.