Object types
Typing objects is just as simple as typing primitive values:
type Profiler = {
logger?: string;
start: Date;
done(info?: string): boolean;
run: () => void;
}
Properties of an object can be marked as optional with the ?
.
Combining object types
Those types have common fields: _id
, price
, and category
.
type Book = {
_id: string;
price: number;
category: number;
title: string;
description: string;
}
type Pen = {
_id: string;
price: number;
category: number;
brand: string;
type: string;
}
Let's create a separate type for the common properties and rewrite the types:
type Product = {
_id: string;
price: number;
category: number;
}
type Book = Product & {
title: string;
description: string;
}
type Pen = Product & {
brand: string;
type: string;
}
Interfaces
Interfaces are another way of creating custom types.
interface IProduct {
_id: string;
price: number;
category: number;
}
interface IBook extends IProduct {
title: string;
description: string;
}
interface IPen extends IProduct {
brand: string;
type: string;
}
There are some very minor differences between type aliases
and interfaces
.
In general interfaces
seem to be more suitable for object-oriented code with classes.