#typescript #typescript-typings #typescript-generics
#typescript #typescript-типизации #typescript-generics
Вопрос:
Мне было интересно, возможно ли что-то подобное в TypeScript:
type Something = {...}
interface A extends Something {...}
interface B extends Something {...}
interface MyInterface<T extends Something> {
method(): T
anotherMethod(): number | number[]
}
Тип, возвращаемый, anotherMethod()
зависит от общего, что означает:
- если T — тип A, то
anotherMethod() => number
- если T является типом B, то
anotherMethod() => number[]
Например.
const myObjA: MyInterface<A> = {}
myObjA.anotherMethod() // ==> returns a number
const myObjB: MyInterface<B> = {}
myObjB.anotherMethod() // ==> returns an array
Имеет ли смысл вопрос?
Заранее спасибо, Фрэн
Ответ №1:
Конечно, для этого вы можете использовать условные типы.
interface MyInterface<T extends Something> {
method(): T
anotherMethod(): T extends A ? number : number[]
}
declare const myObjA: MyInterface<A>
const a = myObjA.anotherMethod() // number
declare const myObjB: MyInterface<B>
const b = myObjB.anotherMethod() // number[]
Комментарии:
1. Отлично !!, да, это определенно отвечает на мой вопрос. Большое спасибо. Я не знал об условных типах.