TypeScript type inference
by Arnaud Buchholz
TypeScript
enum ValueType {
boolean,
integer,
string
}
type BooleanValue = {
type: ValueType.boolean,
isSet: boolean
}
type IntegerValue = {
type: ValueType.integer,
number: number
}
type StringValue = {
type: ValueType.string,
string: string
}
type Value<T = any> = T extends ValueType.boolean ? BooleanValue
: T extends ValueType.integer ? IntegerValue
: T extends ValueType.string ? StringValue
: BooleanValue |Â IntegerValue |Â StringValue
const b: Value<ValueType.boolean> = {
type: ValueType.boolean,
isSet: true
}
function check (type: ValueType): Value<type> {
}