#typescript #typescript-generics
Вопрос:
В приведенном ниже коде я хочу получить тип E. Но я не могу найти тип E.
class A<E> {
getParameterType() {
// I want get type of E
}
}
class B {
}
** Example **
new A<number>().getParameterType() // number
new A<B>().getParameterType() // B
Комментарии:
1. Это может быть полезно при определении типов: typescriptlang.org/docs/handbook/2/typeof-types.html
2. Я не думаю, что ты сможешь. Typescript работает только во время компиляции, ваша функция выполняется во время выполнения и, следовательно, не имеет доступа к ней.
Ответ №1:
Это типобезопасный подход для этого:
class A<E> {
constructor(public generic: E) { }
getParameterType() {
return this.generic
}
}
class B {
}
const result1 = new A(42).getParameterType() // number
const result2 = new A(new B()).getParameterType() // B
Пожалуйста, имейте в виду, что небезопасно использовать явный универсальный, который не связан ни с каким аргументом:
function fn<Char extends "a">(): Char {
return "a" // error
}
const result = fn<'a' amp; { hello: 42 }>()
const check = result.hello // 42,but undefined in runtime
Здесь, в моей статье, вы можете узнать больше об умозаключении.