В этом посте вы узнаете 15 полезных советов и приемов машинописи, которые повысят вашу производительность и обеспечат меньше ошибок в вашем коде.

1. Не используйте (as) для лучшей проверки типов

type User = {
  name: string;
  age: number;
  email: string;
}
const user = {
  name: ‘John Doe’,
  age: 30
} as User;

Это не приведет к ошибке из-за того, что вы не указали свойство `email`. Чтобы обеспечить проверку типов, напишите так:

type User = {
  name: string;
  age: number;
  email: string;
}
const user: User = {
  name: ‘John Doe’,
  age: 30
};

2. Используйте (as) для неизменности

const values = [1, 2, 3];
values.push(4);
console.log(values); // [1, 2, 3, 4]

Чтобы сделать массив значений неизменяемым или сделать его доступным только для чтения, вы можете использовать `as`

const values = [1, 2, 3] as const;
values.push(4); // Property 'push' does not exist on type         'readonly   [1, 2, 3]'
console.log(values);

То же самое относится и к объектам,

const user = {
  name: ‘john’
} as const;
user.name = ‘david’;

нельзя присвоить «имя», потому что это свойство доступно только для чтения

3. Используйте утилиту записи при создании динамического объекта или неизвестном типе свойства

type Profile = Record<string, unknown>;
const profile: Profile = {
  id: 12,
  name: 'Brock'
}

4. Используйте утилиту pick при создании нового типа из заданного типа.

type User = {
  name: string;
  age: number;
  email: string;
}
const sendEmail = (arg: Pick<User, "name" | "email">) => {
  console.log(arg); // { name: 'John', email: '[email protected]' }
}
const user = {
  name: 'John',
  email: '[email protected]'
}
sendEmail(user);

5. Используйте Generics, чтобы обеспечить возможность повторного использования функции

function removeItem<T>(arr: Array<T>, item: T): Array<T> {
  const index = arr.findIndex(value => value === item);
  arr.splice(index, 1);
  return arr;
}
removeItem([1, 2, 3], 3);
removeItem([‘PHP’, ‘JavaScript’, ‘Python’], ‘PHP’);

Теперь arr может быть массивом строк или массивом чисел, а элемент может быть числом или строкой, мы можем повторно использовать функцию removeItem.

6. Используйте partial, чтобы сделать каждый тип свойства необязательным

type Post = {
  id: number;
  title: string;
  body: string;
}
const post: Partial<Post> = {
  title: “This is my first post”
}

В этом примере `id` и `body` игнорируются, так как это Partial‹Post›.

7. Используйте индексированный тип доступа для поиска определенного свойства из типа

type Message = {
  id: number;
  body: string;
  sender: {
    name: string;
    email: string;
  }
}
type MessageSender = {
  info: Message[‘sender’];
}

В этом примере мы получаем тип отправителя, используя индексированный тип доступа typeScript.

8. Используйте Type Guards, когда вы используете объединение типов

function showMessage(message: string | object): void {
  if (typeof message === "string") {
    console.log("The type is string");
  } else if (typeof message === "object") {
    console.log("The type is object");
  }
}
showMessage({ name: "John Doe" });

Как и `typeof`, typescript также обеспечивает защиту типа `in`,

type User = {
  name: string;
  age: number;
}
type UserAddress = {
  house_no: number;
  state: string;
  city: string;
}
const main = (obj: User | UserAddress) => {
  if(‘name’ in obj) {
    processUser(obj);
  } else {
    processAddress(obj);
  }
}
main({ name: ‘John’, age: 24 });

9. Не делайте свойство необязательным, если оно недопустимо, вместо этого создайте новый тип с пропущенной утилитой.

type Post = {
  id: number;
  title: string;
  body: string;
  category: string;
}
const savePost = (obj: Omit<Post, “category”>) => {}

У отдельного поста может не быть свойства категории, но его все равно необходимо обработать.

10. Укажите тип каждого API отдельно

// don’t do like this
type GitHubAndSlackAPI = {
  id: string;
  title: string;
  body: string;
  created_at?: Date
}
// instead do like this
type GitHubPRApi = {
  id: string;
  title: string;
  body: string;
  created_at: Date
}
type SlackApi = {
  id: string;
  title: string;
  body: string;
}

Таким образом, мы можем эффективно добавлять больше информации для каждого API.

Это 10 советов и приемов машинописного текста.

Кредит

Этот пост написал один из лучших инженеров-программистов Technext — Мухаммад Лахин.

Technext помогает стартапам и компаниям нанимать отличных инженеров-программистов.

Вы можете нанять оффшорную команду разработчиков программного обеспечения от Technext.

Пожалуйста, ознакомьтесь с услугами, которые мы предлагаем как услуги по разработке оффшорного программного обеспечения для ваших стартапов.

Есть проекты?

Свяжитесь с нами, чтобы нанять блестящую команду разработчиков программного обеспечения и дизайнеров UI/UX. Создавайте проекты своей мечты.

Давайте сотрудничать

Поговорите с нашим руководством напрямую.

https://bd.linkedin.com/in/syed-rezwanul-haque-b7889628