# Type system

The table below is a mapping between [scale-codec](https://docs.substrate.io/reference/scale-codec/) types (Rust) and TypeScript types that we're using for Dedot:

| Scale Codec (Rust)                                                                                                                                                    | TypeScript (dedot)                                                                                                                      |                                                                                                                                          |                                                                           |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| <p><code>u8</code>, <code>u16</code>, <code>u32</code>,</p><p><code>i8</code>, <code>i16</code>, <code>i32</code></p>                                                 | `number`                                                                                                                                |                                                                                                                                          |                                                                           |
| <p><code>u64</code>, <code>u128</code>, <code>u256</code>,</p><p><code>i64</code>, <code>i128</code>, <code>i256</code></p>                                           | `bigint` (native [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt), not bn.js)          |                                                                                                                                          |                                                                           |
| `bool`                                                                                                                                                                | `boolean` (true, false)                                                                                                                 |                                                                                                                                          |                                                                           |
| `Option<T>`                                                                                                                                                           | `T \| undefined`                                                                                                                        |                                                                                                                                          |                                                                           |
| `Result<Ok, Err>`                                                                                                                                                     | <p><code>{</code> </p><p>  <code>isOk: true;</code> </p><p>  <code>isErr?: false;</code> </p><p>  <code>value: Ok</code> </p><p><code>} | {</code> </p><p>  <code>isOk?: false;</code> </p><p>  <code>isErr: true;</code> </p><p>  <code>err: Err</code> </p><p><code>}</code></p> |                                                                           |
| `Vec<T>`                                                                                                                                                              | `Array<T>`                                                                                                                              |                                                                                                                                          |                                                                           |
| `str`                                                                                                                                                                 | `string`                                                                                                                                |                                                                                                                                          |                                                                           |
| Tuple: `(A, B)`, `()`                                                                                                                                                 | `[A, B]`, `[]`                                                                                                                          |                                                                                                                                          |                                                                           |
| <p>Struct:</p><p><code>struct {</code> </p><p>  <code>field\_1: u8,</code> </p><p>  <code>field\_2: str</code> </p><p><code>}</code></p>                              | <p><code>{</code> </p><p>  <code>field\_1: number,</code> </p><p>  <code>field\_2: string</code></p><p><code>}</code></p>               |                                                                                                                                          |                                                                           |
| <p>Enum:</p><p><code>enum {</code> </p><p>  <code>Variant1(u8),</code> </p><p>  <code>Variant2(bool),</code> </p><p>  <code>Variant3</code> </p><p><code>}</code></p> | <p><code>{</code> </p><p>  <code>type: 'Variant1',</code> </p><p>  <code>value: number</code> </p><p><code>}                            | {</code> </p><p>  <code>type: 'Variant2',</code> </p><p>  <code>value: boolean</code> </p><p><code>}                                     | {</code> </p><p>  <code>type: 'Variant3'</code> </p><p><code>}</code></p> |
| <p>FlatEnum:</p><p><code>enum {</code> </p><p>  <code>Variant1,</code> </p><p>  <code>Variant2</code> </p><p><code>}</code></p>                                       | `'Variant1' \| 'Variant2'`                                                                                                              |                                                                                                                                          |                                                                           |
