#typescript #generics
#typescript #общие
Вопрос:
У меня есть эта функция:
const getFilter = () => ({
value1: null,
value2: null
} as IFilter)
export interface IFilter {
value1: object,
value2: string
}
Как мне преобразовать этот метод в общий, я хочу, чтобы интерфейс был T
, а свойства getFilter были расширяемыми
Комментарии:
1. Увидев ваш предыдущий вопрос, я понимаю, что на самом деле это не имеет особого смысла. Пожалуйста, дайте более точный обзор проблемы, потому что я не уверен, что generic действительно оправдан здесь. В своем последнем вопросе вы упомянули наличие нескольких интерфейсов. В чем проблема с возвратом общего из
getFilter
? Никакие дженерики не должны быть задействованы. Кроме того, всеfn = <T>() => ({} as T)
, что нужно, это переместить приведение в вызов функции, ноf<Something>()
оно по-прежнему остается тем же, что и неродовоеf() as Something
2. @VLAZ У меня есть фильтр интерфейса, и 3 интерфейса расширили этот интерфейс фильтра. Каждый из 3 интерфейсов имеет свой собственный уникальный набор свойств в дополнение к свойствам IFilter
3. Следует
getFilter
ли создавать эти свойства или просто создавать базовый фильтр?4. @VLAZ getFilter должен создавать базовые свойства, свойства и свойства отдельно для каждого расширенного интерфейса
5. Тогда это не то, что делает универсальный. Использование утверждений типа (the
as
) не изменяет форму объекта, оно просто заставляет компилятор рассматривать его так, как будто он на самом деле отличается. Таким образом, вызовfn<Something>()
иfn<Something2>()
будет иметь точно такие же результаты, даже еслиSomething
иSomething2
отличаются. Общие типы и система типов в целом существуют только во время компиляции, а не во время выполнения. Во время выполнения оба этих вызова будутfn()
и все. Вам нужно другое решение, например фабрика, для создания разных объектов.