私は現在、タイプスクリプトでより高度な型付けに手を出していますが、ハイパースクリプトのような関数をどのように定義するのか疑問に思っていました. さまざまなアプローチを試しましたが、h
関数を正常にオーバーロードして、使用法コメントの下にリストされているすべての CallExpressions を渡すことができません。
これが私がこれまでに持っているものです:
interface IProps {
[key: string]: any;
}
function h(tag: string, props?: IProps): void;
function h(tag: string, children: string): void; // <- marked as invalid
function h(tag: string, props: IProps, children?: string): void {
// ...code goes here
}
使用法:
h("div");
h("div", "Hello World");
h("div", { className: "test" });
h("div", { className: "test" }, "Hello World"); // <- marked as invalid