元组类型

元组类型是另一种 Array 类型,它确切地知道它包含多少个元素,以及它在特定位置包含哪些类型。

A tuple type is another sort of Array type that knows exactly how many elements it contains, and exactly which types it contains at specific positions.

type StringNumberPair = [string, number];
//                      ^^^^^^^^^^^^^^^^

soFOMOV9/eWBVRknDOxYQThsdpHk+FCQnVCvbn8Iydri+shtpnADptL8eVtCThXQlN7wtHcz9xxAoA3Y13z8Jqz2TCtCx7YI91vNMCygMzNNnhJ+Aarr+GGOzBPIp4GCj5hRHkmiI76XHTmDzcXwJlQ/PGP1F2TfUn2khNoDNZGcid0cOOFPl3VNHV75HUdVrPiYoTgE94kDxk6uAL1Fq5r87rgQ92VqfB3qwbIHXdS5BzivBHGmXBqwe/TBDyIdR873twc0FPs7+cNHOFFzJBq8j/io9uT/cwa5FUIETqc+pBMnF6XgTmBimgPSJPLq0a5m6b75+zQmQ1fxB2OiyxgzmDNlYwdRjnoBlc5JS/+wpy3cdeUYEgyHi4Z24XpGn2NLcOd35udExLoIExPRrV0QVBEc0kruPSdWNXb+Vxb7h1bbN1yBHtDIkvgsvYnsLI79Saj3DEk6jMkClVpK2OA0uXnUNAEyev2ftqWDjy+g12+vIz2C8uVCFjnGvW0MXimorm2aAQXlqj1meDMg8xu40n2KRyjbqF7ZnZoKobr1ikVdCmLUBbrsTJEZAry0Ab5p3+vg6v3uUncylBHL6PqxtTT7hUla0YNbPnRT0MTE2aMsYJogvOIVO8m/CbSwoQFfUX3rtoXGxx1UpXKF3xsbHQq0It/0bENwVeV2VXnVun7LWR2+G2nZELa2eTvEVd2Lrh8hq8F0mNJK36Dx0E+9Eqp4eWP5JFPUd26JBOVaHiPLvC3x1NbkV9+HyN+GATxwfmk/mPnJfswq4UYJqfvL4KPrvpH7fuynOvXF1Cbv9Jk4S6fzMLIkA/ItJ74UxQdwQl6WjeqBWuf7MOFYNSZLXsN1XZo6JHQF21ZN8b6BzZHP8aM8GL0ivP9Y/g5eCm1PqSi4oJl4MiSKdb5YQ05XeKlPP7e7ZX8b8uQVSwZ6s3kypIg4itaphNEPAiPf8g8agv8eNy7l/mFayGf28TExmMZwnD7X5GcEQxo7McRC5Ub1HkkLdG93rvPsifPTZsvtaZ67/MTXjRj8fkSIPUmRFCRr6bzsCXYja7tTTb8=

function doSomething(pair: [string, number]) {
  const a = pair[0];
  const b = pair[1];
  // ...
}

doSomething(["hello", 42]);

3CGHP2SbfL3vH8mouRP9WHDZdCVvHRZYgDs5f9gUHTfSKTvq+VrSSf28N9rJToPSvw9SoRC04vT1kyvIR2/b9EC6qGF95YfFjxmhA1wwnPxWHOVbljOQ1LZ649qBleMaf9MFXLGRkoxgCt7xOdKB5NvoK28VN3Fjy8ovcpbTSiXzv4pQ9x5Fopkd0g/8QJxOTt5BKAzy8kh5fbnPlVX4X/aCkoYItlyK32sFBRzgeeI=

function doSomething(pair: [string, number]) {
  // ...

  const c = pair[2];
}

tK1NjGJCXp5uZajB7b+JdUFnXWJ8XbmbigbEWuiYx4kgTLZNaaPIGqr0o1AYY8195bF78440wsDnjp44Kwkn8hc7BxlOu++P3T0gp17HAPE0TtCQ7AypwFls70yWscTH/J9FrZFYVg1DxYOT9f5U8hYaNNPYKhyx30Z3T4HISVlhQKkwonYIFqVVsqzAQTVnyTKcx4k6IaG0u2PrBzEsKHJWePnWpYx34kllvxOE0dbYmKeGdMnRosPDh2K2re5K12eHGKUOQmkmqYeiyoLoQakkY9AXt8i1GuKCw2tborKjoMT7NFcn9VEXDt611oJsRNMcOP2GqLiNWHb0Lg++vQaZ/f+Y7DEwHrF9bp/Hgco=

function doSomething(stringHash: [string, number]) {
  const [inputString, hash] = stringHash;

  console.log(inputString);

  console.log(hash);
}

OzxJ54YbG+GC/02WLlRlrKKtW9rXFxaolrCZ5XuWadGP6pAZzxeAdhME3dLYmAJolp+WdKmkLPHofWsJvuG0Jv6IR6AXn7ymFm+craDZkHytdEqVIWf6lcrfeLgiR0lL5YlzSxV/xygL4WtLc6Jh7Eur1H5cIOH2ei4+Qb6ByO/kp/dCCDlXHPEln3/wZ7dmGk6lvzAbyFqX3jcVMC2wGNrl1AVmS//8MMzKIJcRHMyY70Tx0wLlQcqI33BEVmZ2KnTxAscf9t5syj3g8AaVoU1n8AVhPZ75iQJY/sA+O2vE/mIioK+nzWDQPRtwgppTvLBwyRN5D4AD+cv7D7MD7+HQXNZBJaXblL7rQE/dn9gN1YInPiDJic4VhxMBeuh2jpASiK+Hsf222or3trLav9lEbZDkaPKCWC7nGG7lRJtJ8e0QYxGSG/UQICbif0xjQyoefYc61/P0N902TlvidMp416eCpKOq+AMqCOQ6Cv6rKP+Gjsza7E7EIrpmBhIJjLV6REalBiEvpFvV7D8bopY1+Wdk+QeqahkP+x0sRTRLY8N+uNklmd8ypFOvpFFbCCmbtfvubucSy0lbpqw2bzI9vJkghyNNgIIYrKWn6lhG7No4nRUO0HooxgXSxtSTTIyqmFIsVb35tbyU7SxJTrgoJpK30Ukp0yCYALFV+uD4VuYDfvsaY5t7JERR44q+YykCpJ3Nlk3ByDca2QDhOwbUgMf+mjecL3NkJi0xTivFHUs6EL1lNlCy93mNOBhPDT1G6hgluDrwEjyf77AKpL/wLoXcosHhopNmxbC9FwA=

ZsEmUxCmX6iMVZNFnx6g4BBsB17FTEWFdkAY2/4Sfaw4DPyzuojuwb6d8VRWDJCFuuW0xPJf7q8e5AQpOum9qE8a1gQtjP6jcmXkTI8D5lZuB158kKoFkWB+zoLi1aWo+UZLS01xbK4gdpbD/G2ysuDp6dxgoPWa0hdf3c4tCHw/2mjdYxNsppgImkz75fHWMdTPXz9i3WjA+vxCAZj6c+5C2FJDhIzN1Vk6LL6JDTAqBYBVeRw8mnbyd7ADyzB4PdZVgptAsYiKcb3pLWYgQ+Ek+w04Er7Ksc+1TGVvAk0UP5qbq27uKiBbNIPiLO3rGe5+C4DsZCf9/OAsmcp4MfMr9v/AsQPlJL3Qz9MiEN1mJHj5cglOHRPPWmcCGLSr8EqAG1hKmf5P2ZrluA2noC/4vqyTEaaEny45JX5euRZY37hrZ8Ns9K9VJqe8EqSIb3Iwvhyi4devu7EctyGI+zvUMjz2IjqUvvb8hhoqAPsVJWMGx8Vl83iDTuqo2yiAyhszPt3TOgH8+ldxcHw/Ww==

4EWmUT5HSaPeXgLjAvinCfF8jfCd+qswntZ+ZKRaB1rAinMjlwhxzCoNGxpIQhrsxqNjIlB7PuJhwTr9M6uNfT6H+TTnaZ6fiA5/k9jTHUl8xvBN9GTJwfW5fJvGyBCrStkfwrX7Bv7/cIZnTc+B79lk1eR97L0L2BS1UfGG4nr9DvYyopVBx4NEqjBPkCO6PHfFRZ6s6jGW4stpceiLZGu2BIhdlFmiqJL59Ibep9PwLcp3lPaWG7n/YBYcUZu8E9cK9rGJsPDEMhn4jnuI91o76EbbCTpwVPjzZ++ZqjcjeQqXPkiZ0u3AiRK3+9nBva7MyzZdgftb1lrsho0nlr06Yg/echzYbpPEDeUqZGnuHOVqDdTpkYPw4pl5Ogp4j6V2BTWDk4+X+ndfNag0qN35IblJ9A65s6DNEOKdMJ/lywW8Y0C/DJwcQDcrwg1c7GKzWvPQolBQ9t6yn1XPVEKDOhZojzmBPdwcZeKTrvTXM0GpFgiwIxRvmqcSL9Kwt7cbAzd7qBcLkAlYvzXE7XW4CUhwctXR8lIbzXEaSulBnK1zNcrMgrYNEoolXwRvJvWb0swEWev+CDkCq9UdoBL+P/4YqzGmyBIWtwC/XpM=

interface StringNumberPair {
  // specialized properties
  length: 2;
  0: string;
  1: number;

  // Other 'Array<string | number>' members...
  slice(start?: number, end?: number): Array<string | number>;
}

KH4+qc35FPIBE+eoGWx6+vE9uuCrL+Av8jPfLVLZbQ+9/rebKD0MIQVZG68ArTQqc1s+gQx2q2Y89GOLBz41O1Q/n2OmpC8Iwg6CDGS1zcJKBPwKJWbk+h1+PFm8tdWzEa6cD/XOEt7Wvm6rhl958IAFw/5Hh3bl8vAT3hn5bI+GlDEH8cL5wdj/+dljP2oh39CELDDhMSFsmM7dDdjZR5Bf/13UCHF6eO1/bsIdjSz+KJHo0vS3w9caaH6Rf8aYoljXnJlwIWCDwnfWtEA7EaPTrrRM+u4pLtnXXxntptXaKxRXl76ZxZmQ5BwOA8mD6ZmlaW9DQZv3pINYz681uUyaFQ9vopzLN7gG0hLht+6RK6KP5N5bMRZxzaO4pjPXVhJrUmIBZXwjycrunEuGeOoorGF2o8ruqpcpqzUlhBjU2E/9IU1tGDASVv5tUyGc+3uOBvxW+gt2FvAfE0I8O8JMfJqQLKuiuG1WNP/PGycXJmhXB1R3k7g4rMj1zhLeFof/d/29MkNxC78c6qwBxUZnDxlkw1oDk6ce7M/Yfzt/mkzQiTiBd7QOGf/gK7Hq/NSnB8+5hyfv/9hw531mS4w6GWWb9aVDEEVAQjj/c2ywsdotUA1vbiDrpezr6xYjAZVm1+taYEspQsNV4g4i9w==

type Either2dOr3d = [number, number, number?];

function setCoordinate(coord: Either2dOr3d) {
  const [x, y, z] = coord;

  console.log(`Provided coordinates had ${coord.length} dimensions`);
}

4O+q2lHhL0CdroTTjy6jBFyVhSJW5EbGcU/CI5Z5j02d1kGx+iHW4y2Sy3iF6wSwtJuZYVzjVSblgYCpbh0B5GVWUg2fcseA9VMlXBHl2y5jdX3AvkqtyxSfZFRPvNvuesLbw0DBQst4frYtMiSWugW5QJ7oDLr3BVf2AyF4L2VvSjkzlDWjJ/htOUFmXsLgheG+TcBrdayPwD6zZIqygtJUvMMiiMlJIKCyBIsYAtM=

type StringNumberBooleans = [string, number, ...boolean[]];
type StringBooleansNumber = [string, ...boolean[], number];
type BooleansStringNumber = [...boolean[], string, number];
  • StringNumberBooleans 描述了一个元组,其前两个元素分别是 stringnumber,但后面可以有任意数量的 boolean

    Xu3zz78coLdjpsbrvthAgLy3WppOPvWr72sQMpdaj1XbNenV1yld0/UYg+YAwVbONbhWGCh3FdJc/8Yf7eZOVbSsv8G4zdOUPkTam3guOATFs5eZlEx3PoDvFUT91JSXE+4qiQXIMW5SQ3nuKTxACG0rxiTCsqbRHTGBhVmmwhFeXx2DyMaG2M4v385WCJsjJtIvLesMAU+V51Z7JLMyTBQ/gB1Ox4FkmGRPboOTLj7IJKwEZZ6M6eK+DPjQTAvRBFxNYsdMnh5e3Ta9lfwWGA==

  • StringBooleansNumber 描述了一个元组,它的第一个元素是 string,然后是任意数量的 boolean,并以 number 结尾。

    lFsL0ZlKDMP7cZXqxprtfa0QkHKtH+6D4rEypMX4AmRIafpZjm2C7EtSqFw51xR72CA9H8tFKsDz4qMSmyR3Wn6HlqHlk5wlE9UKiJqaHSH1o6LMDOJqslrssn81NYXIIA+1Q5qcvPfX6/RFITMY+oVU0SOQszK+XMIUX/hkOw+c6QwgFL2xKdv+6MtjG/KX6XslPIId7rVpOK8b3u4rdooIO+AhIayg+GW815ZuBjNjdnHXgtCTV6Leh2KBR8tB

  • BooleansStringNumber 描述了一个元组,其起始元素是任意数量的 boolean,以 stringnumber 结尾。

    tRL4Zh2oj5iCKRJXpeB4fNRU9ekWUvXrux97qyPsMNPECj+srvzgOxrSk61YRw5EBq0tSg3UHl2n9WVx9thSn6QbXa63ohhQJcWvM7K/zHVGjzPc4dVQVXlerpNEALB4E4ha9/gL7ZLgo2b1oyRvCM/BntnTJz2zKJrTpnLpl7G9vNyU3rvuYJzMD+XogunQJlSXnYQtF/YREvVKpo9I8JejE/N2n7mvB7X5rslEZKob64U97tuCVlCMwO3EeDhX

v8vhPhfl+0vWPhiJ0uJiiU0yV8CsFaF6wZNjYtJbKvVCmQqrrgKRq3xUj6UB10++x47J81iL6S3wsi6bq8MqirJVwNEfX9idCF7F/xnhCt5sbK0+lTBZPv/KK6gZWZ7/M+tpPeR/ipkvcFUV5MFgL8SjWlrXXCY/apEB9W7RH5jTfgfb/7ENvY3gGSP+hCjrjwDjbzRETKxZHp2YpBVyqY76172E8oqpUKJEm7p9yhjHRJCelv2LTHZevxPJiFMT+UrkCzKI/mTY5JLKBoucateB7Bb/F37ZMjvIZJK2oDdZnodn5fZr2ljqZSVQCzXF

type StringNumberBooleans = [string, number, ...boolean[]];
const a: StringNumberBooleans = ["hello", 1];
const b: StringNumberBooleans = ["beautiful", 2, true];
const c: StringNumberBooleans = ["world", 3, true, false, true, false, true];

MPf8UMMWVRuAVay5zzamqho5fdZI3XazKt4TN8PuJGiz9SxixFybdrjgpRjHjlzXrYPN2pEw2rTtIDySsGir4mo3sUeAot6iXqhE0eCTycdilMaZRcSaX+gwELDdBsY6WyqcUiuigCDYWTMYjKLu+2oKv0rX5ntkJgl4dGx/ope8DaU9s45NJJcwOBSNioaYbtI2DeC+B7jHpNo1tqgBZ2/JSSeNCA/B1ugS0YV3cQm71KxpLZL2ZeUl8GVOVquHA/wQoVXNmMP400Kifm5JD5pS4yiafa18A5Ci6FtQhmErV77q2059N5FvgMq23rVCGSIDMu/CihCjg6MfyYCYZ3T4CCHXfnB3Kdx976Do5Jn2XZgkZOUsdZ9ZFlm1cA65CmFfXIQ9/XlJo+qckwq+jMYWa2XrZV6GccZNWrokDADvr5ogVKDnc4WDrR2lElsKq/5K1mHkj/fJqdBRM+OZnVxI/cVZ9lkbYGK1gFtdtozbOdfAocaJH+LXUuEGPTVTA5uHgzBI/HFoQbzHYWGAEwrzwDlQjD/PygdIm1u2L7IluTyfnRmSRUiXUEE17d+Sq2q9ZWFUXzk3czjHy+N53kzFlMTuEE5OzYirs79whf78M+kVBMj4H/es5gxFxNeepu+GWPJblsqVAMG8NinkushJQHWiMKqNB4Qt8JUCXA4=

function readButtonInput(...args: [string, number, ...boolean[]]) {
  const [name, version, ...input] = args;
  // ...
}

4NBe9/m2n3X8uOlElHeUpt7o1wAhMeaxB3RtlnctsXJUm28aqEFnNaOEKjKxR0gtt6RnBiDY+iIz8u4xCokHVZj8F/3KoTdpy8gxAZgRC2Q=

function readButtonInput(name: string, version: number, ...input: boolean[]) {
  // ...
}

YS5NClj3ichIo2MPzFiCgCXGGEHjsG8kRVoekvpppJkW9VC+LdequbpwDsNG8LWFX7GgJaCi681rN8A5uc6bhdIIgwai81TQn2xNw3w39rJi1KwDd2izmZp+ox3CpGtxzc8N4GzZx11DKiEpfTf63itSAH8VD9ViYqkfTpMPvPzmu4HFy4fGE/Jozi6bIBJ1N0x6EY0vDj8eahf1cS3Te2dCIYQ7IVytoRe6T3+MpS2TbEOu95V1mU04nX+OrIOBB6n//pu0sOwY1V/PFMZ97u3WidMoVtJQWgQszkrhYQtFlCg76sf4wRbGOhKCbr+dDnWJ2/RwXE733cVITAjxI1u8iNY5+x7iJfSwKTXoNVME0EtZwYhlWm9jDOHGJfLy+jK74JRvGOWBGKvLIhciWR1nwnqbzkXAl48+ekkxdyRYPcjjWO8beMXvo+xRp6RVqZIMGo13/5wP9GS9l08C3UGPQiDZ5PQX00/uPzXp80I=