#typescript
Вопрос:
Давайте предположим, что у меня есть интерфейс, называемый dto
. В нем есть несколько полей разных типов.
Я хочу иметь функцию, которая может принимать только параметр, имя которого является одним из ключей dto
, а тип-только число.
interface dto {
aaa: string,
bbb: number,
ccc: boolean,
ddd: number,
}
const variable = <dto> {
aaa: "hello",
bbb: 42,
ccc: false,
ddd: 914
};
function test(param: <SOME MAGIC HERE>): number {
return variable[param] 10;
}
console.log(test("aaa")); // error, because dto.aaa has type of string
console.log(test("ccc")); // error, because dto.ccc has type of boolean
console.log(test("eee")); // error, because "eee" id not among keys of dto
console.log(test("bbb")); // ok, will return 52, because dto.bbb has type of number and "bbb" is among keys of dto
Возможно ли это вообще?
Ответ №1:
ДА
type OnlyNumbers<T> = {
[Prop in keyof T]: T[Prop] extends number ? Prop : never
}[keyof T]
function test(param: OnlyNumbers<dto>): number {
return variable[param] 10;
}
Комментарии:
1. Извините, забыл дженерик