interface BaseSpectrum {
dimension: number;
}
interface Spectrum1D extends BaseSpectrum {
foo: number;
}
interface Spectrum2D extends BaseSpectrum {
bar: number;
}
const spectrum: Spectrum = {...null};
if (is<Spectrum1D>(spectrum, spectrum.dimension === 1)) {
// spectrum is Spectrum1D
void spectrum.foo;
}
else if (is<Spectrum2D>(spectrum, spectrum.dimension === 2)) {
// spectrum is Spectrum2D
void spectrum.bar;
}
Conditional type casting. You are responsible for ensuring that the condition implies the type casting.