У меня есть объекты со свойствами. Эти свойства могут быть как однозначными, так и списочными, а некоторые свойства являются необязательными, то есть они могут быть неопределенными. Итак, вот несколько примеров объектов:
type A = {
myProp: string;
otherProp?: number;
}
type B = {
coolProp?: boolean[];
someProp: SomeOtherType[];
}
редактировать:
Теперь я реализовал функцию, которая принимает такой объект и имя свойства и возвращает это свойство таким, каким оно было, за одним исключением: если свойство НЕ является необязательным и НЕ является массивом, оно возвращает это свойство как массив с исходным типом в качестве типа массива.
Теперь я реализовал функцию, которая принимает такой объект и имя свойства и возвращает это свойство таким, каким оно было, за одним исключением: если свойство НЕ является массивом, оно возвращает это свойство в виде массива с исходный тип как тип массива.
Так, например, свойства из типа B сверху не изменились бы, но myProp: string;
из типа A станет: myProp: string[];
. otherProp?: number
также останется прежним.
Так, например, свойства из типа B сверху не изменятся, но myProp: string;
из типа A станет: myProp: string[];
. otherProp?: number
станет otherProp?: number[]
.
Теперь я хочу поместить это поведение в определение типа возвращаемого значения в интерфейсе, но я не могу понять, как заставить это работать.
Моя лучшая попытка была:
getPropFromObject<O, P extends keyof O>(node: O, propName: P):
any[] extends O[P] ? O[P] : O[P] extends undefined ? O[P] : O[P][]
, но он терпит неудачу для отдельных дополнительных реквизитов, таких как otherProp?: number;
Как будет выглядеть правильное определение типа?