#typescript
#typescript
Вопрос:
Я пытаюсь сделать что-то вроде следующего:
function test<
Feature extends { shape: Geometry; properties: Properties },
Geometry extends geojson.Geometry,
Properties extends {}
>() {
const addFeature = (feature: Feature) => {
switch (feature.shape.type) {
case "Point":
break;
}
};
return {
addFeature,
};
}
test<{ shape: GeoJSON.Polygon; properties: {} }, GeoJSON.Polygon, {}>();
Есть ли какой-либо способ не требовать передачи второго общего и третьего общего? Я хочу иметь возможность сделать это:
test<{ shape: GeoJSON.Polygon; properties: {} }>();
и пусть typescript выведет два других общих типа
Ответ №1:
Вы можете полностью опустить определение функции, поскольку оно зависит от Geometry
и Properties
function test<
Geometry extends GeoJSON.Geometry,
Properties extends {},
>() {
const addFeature = (feature: { shape: Geometry; properties: Properties }) => {
switch (feature.shape.type) {
case "Point":
break;
}
};
return {
addFeature,
};
}
test<GeoJSON.Polygon, {}>();
или определите его в другом месте
type Feature<G extends GeoJSON.Geometry, P extends {}> = {
shape: G;
properties: P;
}
function test<
Geometry extends GeoJSON.Geometry,
Properties extends {},
>() {
const addFeature = (feature: Feature<Geometry, Properties>) => {
switch (feature.shape.type) {
case "Point":
break;
}
};
return {
addFeature,
};
}
test<GeoJSON.Polygon, {}>();
но у него все равно будут некоторые проблемы, если у вас много функциональных возможностей