update readme

This commit is contained in:
Tom Elliott 2024-07-12 18:08:25 +12:00
parent 2473cee198
commit c19b73ea6d
3 changed files with 16 additions and 13 deletions

View File

@ -70,7 +70,7 @@ export const app = {
),
sample: z.function(
z.tuple([z.character_vector(), z.integer()]),
z.promise(z.union([z.character(), z.character_vector()]))
z.promise(R.character())
)
};
```
@ -78,9 +78,10 @@ export const app = {
which will generate the following types:
```typescript
type App = {
add: (x: number, y: number) => Promise<number>;
sample: (x: string[], n: number) => Promise<string | string[]>;
add: (x: number, y: number) => Promise<{ data: number }>;
sample: (x: string[], n: number) => Promise<{ data: string | string[] }>;
// or, if possible, even better:
sample: <N extends number>(x: string[], n: N) => Promise<N extends 1 ? string : string[]>;
sample: <N extends number>(x: string[], n: N) =>
Promise<{ data: N extends 1 ? string : string[] }>;
};
```

View File

@ -647,16 +647,17 @@ body {
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true"></a> )<span class="op">,</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true"></a> sample<span class="op">:</span> z<span class="op">.</span><span class="fu">function</span>(</span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true"></a> z<span class="op">.</span><span class="fu">tuple</span>([z<span class="op">.</span><span class="fu">character_vector</span>()<span class="op">,</span> z<span class="op">.</span><span class="fu">integer</span>()])<span class="op">,</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true"></a> z<span class="op">.</span><span class="fu">promise</span>(z<span class="op">.</span><span class="fu">union</span>([z<span class="op">.</span><span class="fu">character</span>()<span class="op">,</span> z<span class="op">.</span><span class="fu">character_vector</span>()]))</span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true"></a> z<span class="op">.</span><span class="fu">promise</span>(R<span class="op">.</span><span class="fu">character</span>())</span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true"></a> )</span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true"></a>}<span class="op">;</span></span></code></pre></div>
<p>which will generate the following types:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode typescript"><code class="sourceCode typescript"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a><span class="kw">type</span> App <span class="op">=</span> {</span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a> add<span class="op">:</span> (x<span class="op">:</span> <span class="dt">number</span><span class="op">,</span> y<span class="op">:</span> <span class="dt">number</span>) <span class="kw">=&gt;</span> <span class="bu">Promise</span><span class="op">&lt;</span><span class="dt">number</span><span class="op">&gt;;</span></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a> sample<span class="op">:</span> (x<span class="op">:</span> <span class="dt">string</span>[]<span class="op">,</span> n<span class="op">:</span> <span class="dt">number</span>) <span class="kw">=&gt;</span> <span class="bu">Promise</span><span class="op">&lt;</span><span class="dt">string</span> <span class="op">|</span> <span class="dt">string</span>[]<span class="op">&gt;;</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a> add<span class="op">:</span> (x<span class="op">:</span> <span class="dt">number</span><span class="op">,</span> y<span class="op">:</span> <span class="dt">number</span>) <span class="kw">=&gt;</span> <span class="bu">Promise</span><span class="op">&lt;</span>{ data<span class="op">:</span> <span class="dt">number</span> }<span class="op">&gt;;</span></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a> sample<span class="op">:</span> (x<span class="op">:</span> <span class="dt">string</span>[]<span class="op">,</span> n<span class="op">:</span> <span class="dt">number</span>) <span class="kw">=&gt;</span> <span class="bu">Promise</span><span class="op">&lt;</span>{ data<span class="op">:</span> <span class="dt">string</span> <span class="op">|</span> <span class="dt">string</span>[] }<span class="op">&gt;;</span></span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true"></a> <span class="co">// or, if possible, even better:</span></span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a> sample<span class="op">:</span> <span class="op">&lt;</span>N extends <span class="dt">number</span><span class="op">&gt;</span>(x<span class="op">:</span> <span class="dt">string</span>[]<span class="op">,</span> n<span class="op">:</span> N) <span class="kw">=&gt;</span> <span class="bu">Promise</span><span class="op">&lt;</span>N extends <span class="dv">1</span> <span class="op">?</span> <span class="dt">string</span> <span class="op">:</span> <span class="dt">string</span>[]<span class="op">&gt;;</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a>}<span class="op">;</span></span></code></pre></div>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a> sample<span class="op">:</span> <span class="op">&lt;</span>N extends <span class="dt">number</span><span class="op">&gt;</span>(x<span class="op">:</span> <span class="dt">string</span>[]<span class="op">,</span> n<span class="op">:</span> N) <span class="kw">=&gt;</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a> <span class="bu">Promise</span><span class="op">&lt;</span>{ data<span class="op">:</span> N extends <span class="dv">1</span> <span class="op">?</span> <span class="dt">string</span> <span class="op">:</span> <span class="dt">string</span>[] }<span class="op">&gt;;</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true"></a>}<span class="op">;</span></span></code></pre></div>
</body>
</html>

View File

@ -64,7 +64,7 @@ export const app = {
),
sample: z.function(
z.tuple([z.character_vector(), z.integer()]),
z.promise(z.union([z.character(), z.character_vector()]))
z.promise(R.character())
)
};
```
@ -73,9 +73,10 @@ which will generate the following types:
``` typescript
type App = {
add: (x: number, y: number) => Promise<number>;
sample: (x: string[], n: number) => Promise<string | string[]>;
add: (x: number, y: number) => Promise<{ data: number }>;
sample: (x: string[], n: number) => Promise<{ data: string | string[] }>;
// or, if possible, even better:
sample: <N extends number>(x: string[], n: N) => Promise<N extends 1 ? string : string[]>;
sample: <N extends number>(x: string[], n: N) =>
Promise<{ data: N extends 1 ? string : string[] }>;
};
```