Design APIs to be simple and idiomatic to JavaScript/TypeScript while maintaining proper encapsulation. Avoid complex type unions, forced undefined parameters, or implementation details leaking through interfaces.
Design APIs to be simple and idiomatic to JavaScript/TypeScript while maintaining proper encapsulation. Avoid complex type unions, forced undefined parameters, or implementation details leaking through interfaces.
Key principles:
Example - Instead of:
interface RequestInitiator {
kind: InitiatorKind.Extension;
extensionId: string;
} | {
kind: InitiatorKind.Internal;
reason: string;
}
function decode(content: Uint8Array, options: { uri: Uri | undefined }): Promise<string>
Prefer:
class RequestInitiator {
constructor(
readonly kind: InitiatorKind,
readonly identifier: string
) {}
}
function decode(content: Uint8Array, options?: { uri?: Uri }): Promise<string>
Enter the URL of a public GitHub repository