polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
46 lines (37 loc) • 1.34 kB
text/typescript
enum Type {
BOOLEAN = 'boolean',
BUTTON = 'button',
}
type Input = boolean | null;
type InputMapGeneric = {[key in Type]: Input};
interface InputMap extends InputMapGeneric {
[Type.BOOLEAN]: boolean;
[Type.BUTTON]: null;
}
type Output = 0 | 1 | null;
type OutputMapGeneric = {[key in Type]: Output};
interface OutputMap extends OutputMapGeneric {
[Type.BOOLEAN]: 0 | 1;
[Type.BUTTON]: null;
}
type ConvertMethod<T extends Type> = (val: InputMap[T]) => OutputMap[T];
const convert_boolean: ConvertMethod<Type.BOOLEAN> = function(value: InputMap[Type.BOOLEAN]): OutputMap[Type.BOOLEAN] {
return value ? 1 : 0;
};
const convert_button: ConvertMethod<Type.BUTTON> = function(value: InputMap[Type.BUTTON]): OutputMap[Type.BUTTON] {
return value;
};
type ConvertMethodMapGeneric = {[key in Type]: ConvertMethod<key>};
const ConvertMap: ConvertMethodMapGeneric = {
[Type.BOOLEAN]: convert_boolean,
[Type.BUTTON]: convert_button,
};
// type Types = Type.BOOLEAN|Type.BUTTON
export class ParamsValueToDefaultConverter {
static convert<T extends Type>(type: T, value: InputMap[T]): OutputMap[T] {
const method: ConvertMethod<T> = (<unknown>ConvertMap[type]) as ConvertMethod<T>;
return method(value);
}
}
ParamsValueToDefaultConverter.convert(Type.BOOLEAN, false);
ParamsValueToDefaultConverter.convert(Type.BUTTON, null);