Type Alias
Dans la leçon précédente, nous avons vu comment déclarer un type d'objet anonyme :
Dans la leçon précédente, nous avons vu comment déclarer un type d'objet anonyme :
// type d'objet anonyme
let point: { x: number, y: number } = { x: 10, y: 20 }
function showCoordinates(point: { x: number, y: number }) {
console.log(`${point.x} ${point.y}`);
}
On pourrait vouloir réutiliser un type d'objet plusieurs fois, pour cela on peut utiliser un alias de type :
// alias de type
type Point = {
x: number,
y: number,
description?: string
}
const p1: Point = { x: 10, y: 20 };
const p2: Point = { x: 10, y: 20, description: 'hello' };
function showCoordinates(point: Point ) {
console.log(`${point.x} ${point.y}`);
}
function showAllCoordinates(points: Point[]) {
// ...
}
Par convention on utilise une majuscule pour la première lettre du nom du type déclaré.
Un alias de type ne sert pas qu'à déclarer des objets, il faut penser au type au sens large :
// alias de type à partir d'une union de types
// + de détails sur les unions dans les prochains chapitres
type Num = 1 | 2 | 3
type MyBool = true | false | "1" | "0"
type User = { firstName: string, lastName: string } | { id: number, username: string }
type MixedTypes = User | boolean | null | any
On peut aussi utiliser une interface pour représenter des objets :
interface User {
firstName: string,
lastName: string,
age?: number
}
let u: User = { firstName: 'Satoshi', lastName: 'Nakamoto' };
function showFullName(u: User) {
console.log(`${u.firstName} ${u.firstName}`);
}
Voici quelques différences entre les alias de type et les interfaces, les exemples ont été repris de la doc officielle (Differences Between Type Aliases and Interfaces).
(et on ne peut pas lui ajouter de nouveaux champs)
type User = {
firstName: string,
lastName: string,
}
type User = {
firstName: string,
lastName: string,
age: number,
}
src/demo.ts:6:6 - error TS2300: Duplicate identifier 'User'.
interface User {
firstName: string,
lastName: string,
}
interface User {
age: number,
}
let u: User = {
firstName: 'John',
lastName: 'Doe',
age: 99
}
Interface :
interface ObjectId {
tokenId: number
}
interface Nft extends ObjectId {
metadata: {
name: string,
num_sales: number,
banner_image_url: string
}
}
Type :
(via les intersections, concept que nous verrons un peu plus tard)
type ObjectId = {
tokenId: number
}
type Nft = ObjectId & {
metadata: {
name: string,
num_sales: number,
banner_image_url: string
}
}