type user = {
id: number,
name: string,
};
type getUserKeysWithoutNumberType<T> = {
[key in keyof T]: T[key] extends number ? never : T[key];
}[keyof T];
const wtf: getUserKeysWithoutNumberType<user> = 'name';
const foo = {
bar: 1
};
foo['bar'] // 1
const baz = {
qux: 2
}['qux']; // 2
тайпскрит в работе с типами тут ничем не отличается: type user = {
id: number,
name: string,
};
type id = user['id']; // number
type userKeys = keyof user; // 'id' | 'name'
type userTypes = user[keyof user]; // number | string
тип never
же просто не учитывается: number | string | never
- то же самое что number | string
.