Помимо этого, TypeScript способен сузить тип Layer, основываясь на теге:
function drawLayer(layer: Layer) {
if (layer.type === 'fill') {
const {paint} = layer; // Тип FillPaint
const {layout} = layer; // Тип FillLayout
} else if (layer.type === 'line') {
const namedPoint = {...pt, ...id};
namedPoint.name; // ok, тип string
function isDefined(x: T | undefined): x is T {
return x !== undefined;
}