تایپاسکریپت: چگونه میتوانم به طور صحیح یک آرایه متشکل از n تا N-تایپل و m تا M-تایپل را تایپ کنم؟
//An N-tuple (quadruple?) that is a subset of a row
type Quadruple = [string, string, number, boolean];
//A value that is a subset of a row
type Value = [string];
//A row in the format [...Quadruple[], ...Value[]]
type Row = (string | boolean | number)[]; //this works...but information is lost.
const egRow1: Row = ["id", "name", 1, true, "id2", "name2", 1, true, "id3", "name3", 1, false, "value1", "value2"];
const egRow2: Row = ["id", "name", 1, true, "id2", "name2", 1, true, "value1", "value2"];
const egRow3: Row = ["id", "name", 1, true, "value1", "value2"];
چگونه میتوانم یک ردیف را بهطور مؤثر تایپ کنم تا این واقعیت را که از M چهارتاییها تشکیل شده و به دنبال آن N مقادیر میآید، رمزگذاری کنم؟
پاسخ شماره ۱
به نظر من این فقط میتواند با شمارش تمام مقادیر ممکن (M) از Quadruple و اتحاد این نوعها انجام شود:
type Row1 = [string, string, number, boolean, ...Array<string>];
type Row2 = [string, string, number, boolean, string, string, number, boolean, ...Array<string>];
type Row3 = [string, string, number, boolean, string, string, number, boolean, string, string, number, boolean, ...Array<string>];
...
type RowM = [string, string, number, boolean, ..., ...Array<string>];
type Row = Row1 | Row2 | Row3 | ... | RowM;
زمین بازی
پاسخ شماره ۲
در تایپسکریپت ۴.۰ میتوانید از PR نوع تاپل واریادیک استفاده کنید تا نحو کمی سادهتر شود، اما هنوز هم نیاز دارید تا تعداد مشخصی از آیتمها را تعریف کنید:
type Quadruple = [string, string, number, boolean];
type Value = string;
type Row = [
...([] | Quadruple),
...([] | Quadruple),
...([] | Quadruple),
...([] | Quadruple),
...([] | Quadruple),
...([] | Quadruple),
...([] | Quadruple),
...Value[]
]
const egRow1: Row = ["id", "name", 1, true, "id2", "name2", 1, true, "id3", "name3", 1, false, "value1", "value2"];
const egRow2: Row = ["id", "name", 1, true, "id2", "name2", 1, true, "value1", "value2"];
const egRow3: Row = ["id", "name", 1, true, "value1", "value2"];
لینک زمین بازی
