#typescript #typescript-generics
#typescript #typescript-generics
Вопрос:
Могу ли я каким-то образом поручить компилятору Typescript изменить определение типа в качестве возвращаемого значения функции, которая вызывается позже в другом месте? У меня есть несколько декораторов, которые регистрируют некоторые метаданные о свойствах класса, а затем я выполняю преобразования на основе этих метаданных:
class MyClass {
@Expose({ name: 'some_property'}) <-- the name value is explicitly provided so known at compile time
public someProperty()
}
const result = classToPlain(/* MyClass */ { someProperty: 'some-value' })
// --> I would like to have an inferred type here as simple object with { some_property: 'some-value'}
// in classToPlain somewhere:
const propertyMetadatas.forEach(hander => {
// transform the input object based on the metadata
handler.transform(inputObject, outputObject)
// -> this assigns the original value from input to the `some_propety` value on the result
})
Я не знаком с каким-либо способом передачи изменения типа по пути. Возможно ли это как-то?
Комментарии:
1. Тьфу, декораторы. Они не меняют тип
MyClass
, который видит компилятор, поэтому на самом деле неверно, что значение имени «известно компилятору во время компиляции»… по крайней мере, никаким образом не связывает егоMyClass
. Если вас волнуют подобные вещи, я рекомендую вам отказаться от декораторов и вернуться к вызову функции (т. Е. К тому, Как реализованы декораторы) или, может быть, Даже просто добавитьexpose
свойство к классам, которые работают таким образом.2. Это работает для вас? Он не использует декораторы, и, несомненно, есть крайние случаи, но это общий способ, который я бы предположил, если вы хотите, чтобы TypeScript знал о типизациях. Дайте мне знать, и если это будет разумно, я напишу это как ответ. В противном случае ответ, вероятно, будет просто «нет, вы не можете этого сделать» с указателем на microsoft / TypeScript # 4881 и, в частности, этот комментарий