Bỏ qua để đến nội dung

Advanced TypeScript

Các topic nâng cao cho TypeScript power users.

type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
type Optional<T> = {
[P in keyof T]?: T[P];
};
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false
type EmailLocale = "en" | "vi";
type EmailType = "welcome" | "reset";
type EmailTemplate = `${EmailLocale}_${EmailType}`;
// "en_welcome" | "en_reset" | "vi_welcome" | "vi_reset"
function log(target: any, key: string) {
console.log(`${key} was called`);
}
class MyClass {
@log
myMethod() {
// ...
}
}
  1. Prefer interfaces over types cho object shapes
  2. Use strict mode trong tsconfig.json
  3. Avoid any - dùng unknown nếu cần
  4. Enable strictNullChecks
  5. Document complex types