export type PainterData = RasterData | SensorData | FillData | LineData | PointData | HeatmapData | GlyphData
export interface Workflow {
fill?: FillProgram
glyphFilter?: GlyphFilterProgram
glyph?: GlyphProgram
heatmap?: HeatmapProgram
line?: LineProgram
point?: PointProgram
raster?: RasterProgram
sensor?: SensorProgram
shade?: ShadeProgram
background?: WallpaperProgram | SkyboxProgram
}
const workflows: Workflow = { ... }
function buildFeatureData (tile: Tile, data: PainterData): void {
const workflow = workflows[data.type]
if (workflow === undefined) throw new Error(`Workflow ${data.type} not found`)
workflow.buildSource(data as any, tile)
}
I would like for data to work properly. FillData should always map to FillProgram and so on. But it natrually resolves to never and I can't think of a way to fix this -_-
Argument of type 'PainterData' is not assignable to parameter of type 'never'.
The intersection 'FillData & GlyphData & HeatmapData & LineData & PointData & RasterData & SensorData' was reduced to 'never' because property 'type' has conflicting types in some constituents.
Type 'RasterData' is not assignable to type 'never'.ts(2345)
(parameter) data: PainterData