У меня есть Parent
интерфейс, который расширен на ChildA
и ChildB
;
interface Parent {
sharedProp: string,
}
interface ChildA extends Parent {
onlyInA: string,
}
interface ChildB extends Parent {
onlyInB: number
}
У меня есть массив, который содержит типы массивов объединения:
const entities: (ChildA|ChildB)[] = [
{
sharedProp: "this will be B",
onlyInA: "because Im a"
}, {
sharedProp: "this will be B",
onlyInB: 12345
}
]
Я сделал функцию non generi c, которая делает то, что я хочу:
const childrenWithCertainSharedProp = (sharedProp: string): ChildA[] => {
return entities
.filter(isChildA)
.filter(e => e.sharedProp === sharedProp);
}
Я мог бы сделать console.log(childrenWithCertainSharedProp('xxx'));
Вот демонстрация.
Но, как вы можете видеть, я поставил возвращение как ChildA[]
, и я мог бы сделать то же самое с ChildB[]
.
Я хочу что-то похожее на следующее, что я не мог заставить работать:
const childrenWithCertainSharedProp = <T>(sharedProp: string): T[] => {
return entities
.filter(/* filter depending on T */)
.filter(e => e.sharedProp === sharedProp);
}
По сути, мне нужно как-то набрать охрану в общем, таким образом, чтобы я удостоверился, что если я передам <ChildA>
, я буду следить за тем, чтобы он фильтровал только ChildA
и т. Д.