interface User {
name: string;
age: number;
email: string;
}
type PartialUser = Partial<User>;
function updateUser(user: User, updates: PartialUser): User {
return { ...user, ...updates };
}
interface User {
name?: string;
age?: number;
email?: string;
}
type RequiredUser = Required<User>;
let user: RequiredUser = {
name: 'John',
age: 25,
email: 'john@example.com'
};
interface User {
name: string;
age: number;
}
type ReadonlyUser = Readonly<User>;
let user: ReadonlyUser = {
name: 'John',
age: 25
};
interface User {
id: number;
name: string;
age: number;
email: string;
}
type UserPreview = Pick<User, 'id' | 'name'>;
let preview: UserPreview = {
id: 1,
name: 'John'
};
interface User {
id: number;
name: string;
password: string;
email: string;
}
type UserPublic = Omit<User, 'password'>;
let user: UserPublic = {
id: 1,
name: 'John',
email: 'john@example.com'
};
type Role = 'admin' | 'user' | 'guest';
type Permissions = Record<Role, string[]>;
let permissions: Permissions = {
admin: ['read', 'write', 'delete'],
user: ['read', 'write'],
guest: ['read']
};
type T1 = Exclude<'a' | 'b' | 'c', 'a'>;
type T2 = Exclude<string | number | boolean, boolean>;
type T1 = Extract<'a' | 'b' | 'c', 'a' | 'f'>;
type T2 = Extract<string | number | boolean, boolean>;
type T1 = NonNullable<string | number | null | undefined>;
type T2 = NonNullable<string | null>;
function getUser() {
return {
id: 1,
name: 'John',
age: 25
};
}
type User = ReturnType<typeof getUser>;
function createUser(name: string, age: number, email: string) {
return { name, age, email };
}
type Params = Parameters<typeof createUser>;
function wrapper(...args: Params) {
return createUser(...args);
}
class User {
constructor(public name: string, public age: number) {}
}
type UserParams = ConstructorParameters<typeof User>;
class User {
name: string;
age: number;
}
type UserInstance = InstanceType<typeof User>;
function toHex(this: Number) {
return this.toString(16);
}
type T = ThisParameterType<typeof toHex>;
function toHex(this: Number) {
return this.toString(16);
}
type T = OmitThisParameter<typeof toHex>;
type T = Uppercase<'hello'>;
type T = Lowercase<'HELLO'>;
type T = Capitalize<'hello'>;
type T = Uncapitalize<'Hello'>;
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
interface User {
name: string;
address: {
city: string;
street: string;
};
}
let user: DeepPartial<User> = {
address: {
city: 'Beijing'
}
};
type DeepReadonly<T> = {
readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P];
};
type Mutable<T> = {
-readonly [P in keyof T]: T[P];
};
interface User {
readonly name: string;
readonly age: number;
}
type MutableUser = Mutable<User>;