چگونه یک رابط که نشاندهنده نوع تاپل در تایپاسکریپت است را بنویسیم؟


خوشحالم که نسخه ۱.۳ تایپاسکریپت منتشر شد، اما چگونه میتوان یک اینترفیس نوشت که نوع تاپل را نشان دهد؟

به عنوان مثال

var data: [string, number, number];

چگونه یک اینترفیس IData بنویسم تا بتوانم همان کار را با نوشتن انجام دهم

var data: IData;

پاسخ شماره ۱

میدانم این یک سؤال قدیمی است، اما فکر میکنم میتوانید آنچه میخواهید را با موارد زیر انجام دهید:

type IData = [string, number, number];

سپس

var data: IData;

شما میتوانید این را در این مثال TypeScript Playground ببینید

پاسخ شماره ۲

توجه داشته باشید که با برخی از ویژگیهای جدیدی که قرار است اضافه شوند، مانند نوعهای اتحاد (union types)، شما تقریباً میتوانید آنچه میخواهید را به دست آورید. آخرین پیشنویس مشخصات شامل مثالی در این زمینه است (به https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3.3.3 مراجعه کنید)

کد زیر مثالی از اینکه این ممکن است چگونه به نظر برسد نشان میدهد:

interface KeyValuePair extends Array<string | number> { 0: string; 1: number; }

var x: KeyValuePair = ["test", 42]; // OK
var y: KeyValuePair = [42, "test"]; // Error

اگر آخرین کد را از شاخه اصلی بگیرید و موارد بالا را کامپایل کنید، خواهید دید که کجا تخصیص به 'x' را معتبر تشخیص میدهد و تخصیص به 'y' را به عنوان یک خطا:

S:\src\TypeScript\bin>node tsc c:\temp\tuple.ts
c:/temp/tuple.ts(4,5): error TS2323: Type '[number, string]' is not assignable to type 'KeyValuePair'.
  Types of property '0' are incompatible.
    Type 'number' is not assignable to type 'string'.