Simplify checking if something is a valid attribute / trait / combatValue key

This commit is contained in:
Johannes Loher 2021-05-13 22:03:32 +02:00
parent 24725c15f9
commit 549669e9e2
5 changed files with 39 additions and 58 deletions

View file

@ -21,30 +21,32 @@ interface DS4ActorDataDataBase {
combatValues: DS4ActorDataDataCombatValues;
}
interface DS4ActorDataDataAttributes {
body: ModifiableDataBase<number>;
mobility: ModifiableDataBase<number>;
mind: ModifiableDataBase<number>;
type DS4ActorDataDataAttributes = { [Key in keyof typeof DS4.i18n.attributes]: ModifiableDataBase<number> };
type Attribute = keyof DS4ActorDataDataAttributes;
export function isAttribute(value: unknown): value is Attribute {
return (Object.keys(DS4.i18n.attributes) as Array<unknown>).includes(value);
}
interface DS4ActorDataDataTraits {
strength: ModifiableDataBase<number>;
constitution: ModifiableDataBase<number>;
agility: ModifiableDataBase<number>;
dexterity: ModifiableDataBase<number>;
intellect: ModifiableDataBase<number>;
aura: ModifiableDataBase<number>;
type DS4ActorDataDataTraits = { [Key in keyof typeof DS4.i18n.traits]: ModifiableDataBase<number> };
type Trait = keyof DS4ActorDataDataTraits;
export function isTrait(value: unknown): value is Trait {
return (Object.keys(DS4.i18n.traits) as Array<unknown>).includes(value);
}
interface DS4ActorDataDataCombatValues {
hitPoints: ResourceData<number>;
defense: ModifiableData<number>;
initiative: ModifiableData<number>;
movement: ModifiableData<number>;
meleeAttack: ModifiableData<number>;
rangedAttack: ModifiableData<number>;
spellcasting: ModifiableData<number>;
targetedSpellcasting: ModifiableData<number>;
type DS4ActorDataDataCombatValues = {
[Key in keyof typeof DS4.i18n.combatValues]: Key extends "hitPoints"
? ResourceData<number>
: ModifiableData<number>;
};
type CombatValue = keyof DS4ActorDataDataCombatValues;
export function isCombatValue(value: string): value is CombatValue {
return (Object.keys(DS4.i18n.combatValues) as Array<unknown>).includes(value);
}
// types