ორივე აღწერს მონაცემების სტრუქტურას და ხშირად ურთიერთშემცვლელი არის, მაგრამ განსხვავებული შესაძლებლობები აქვთ.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
ორივე აღწერს მონაცემების სტრუქტურას და ხშირად ურთიერთშემცვლელი არის, მაგრამ განსხვავებული შესაძლებლობები აქვთ.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type არის ზოგადი alias ნებისმიერი ტიპისთვის — პრიმიტივები, უნიონები, ტაპლები, mapped type-ები. interface მხოლოდ ობიექტის/ფუნქციის სტრუქტურას აღწერს.
interface-ს, რაც type-ს არ შეუძლიაinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
ინტერფეისები მხარს უჭერენ declaration merging-ს (მრავალი დეკლარაცია გაერთიანდება) და წარმოადგენენ იდიომატურ გზას გაფართოებისა/გამდიდრებისთვის, მათ შორის მესამე მხარის ბიბლიოთეკის ტიპების გამდიდრება.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
საერთო კონვენცია: გამოიყენეთ interface ობიექტის სტრუქტურებისა და საჯაროპი API-ის შესახებ (უკეთესი შეცდომის შეტყობინებები, გაფართოებადი, გაერთიანებადი), და type როდესაც გჭირდებათ უნიონები, ტაპლები ან სხვა ტიპის ოპერაციები. აირჩიეთ ერთი სტანდარტად თანმიმდევრობისთვის — ბევრი გუნდი სტანდარტად აირჩევს interface-ს ობიექტებისთვის და მხოლოდ მაშინ მიმართავს type-ს, როდესაც მისი დამატებითი ძალა საჭიროა.