Преобразовать в универсальный

#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() и все. Вам нужно другое решение, например фабрика, для создания разных объектов.