- В чем минус использования TypeScript?
- Разница типов и интерфейсов
- Что такое дженерик
- Что такое декларейшен
- Что такое infer и conditional types
- Какие утилити тайпы ты знаешь
- never vs any vs unknown
Написать свою реализацию Partial (Объект, где все поля опциональные)
type User = {
id: number
}
type PartialUser = NewPartial<User>;
type NewPartial = ....Решение
type NewPartial<T> = {
[key in keyof T]?: T[key];
}Записать правильный тип для MYType, чтоб переменные, которым это тип будет присвоен имели тип состоящий из ключей объекта obj
const obj = {
name: "Nik",
age: 25,
};
type MYType = any;
// Вместо any нужный тип
//---------
/** Тут не должно быть ошибок типов */
const var1: MYType = "name";
const var2: MYType = "age";
//----------
/** Тут должны быть ошибки типов */
const var3: MYType = "test";
const var4: MYType = 25;Решение
type MYType = keyof typeof obj // "name" |"age"Написать generic Pick
type User = {
id: number;
name: string;
surname: string;
}
type RequiredUser = NewPick<User, 'id' | 'name'>
type NewPick = ....Решение
type NewPick<T, K extends keyof T> = {
[P in K]: T[P];
}Есть заранее описанный объект бесконечной вложенности. Конечные свойства всегда string. Нужно написать тип, который будет давать значения-пути для ключа конечного свойства типа string.
{
"greeting": {
"hello": "Hello",
"goodbye": "Goodbye"
},
"user": {
"profile": "Profile",
"settings": "Settings"
}
}Реализовать ResolvableKeysOf
class Test {
public a = 1;
public b = 2;
public c = Promise.resolve(3);
public d = () => 5;
public e = () => Promise.resolve(6);
public x = 'not';
public y = Promise.resolve(null);
public z = () => true;
}
type NumberKeys = ResolvableKeysOf<Test, number>; // "a" | "b" | "c" | "d" | "e"
type StringKeys = ResolvableKeysOf<Test, string>; // "x"
type NullKeys = ResolvableKeysOf<Test, null>; // "y"
type BooleanKeys = ResolvableKeysOf<Test, boolean>; // "z"
type StringOrNullKeys = ResolvableKeysOf<Test, string | null>; // "x" | "y"Типизировать функцию
const someObject = { a: 1, b: 2, c: 3, d: 4, }
const someObject2 = { m: 1, b: 2, c: 3, d: 4, }
const getProperty = (obj, key) => {
return obj[key];
}
getProperty(someObject, 'a') // OK
getProperty(someObject, 'm') // ERROR
getProperty(someObject2, 'm') // OK