/nominal-typing-emulation

Gist: emulating nominal typing with JavaScript symbols

Primary LanguageTypeScript

Nominal typing emulation

import { error, Result, success } from "./util/Result";

const DenominatorSymbol = Symbol();

export type Denominator = {
  [DenominatorSymbol]: "Denominator";
  value: number;
};

const createDenominator = (value: number): Result<Denominator> => {
  if (value === 0) {
    return error("0 is not a valid denominator.");
  }
  return success({
    [DenominatorSymbol]: "Denominator",
    value,
  });
};

export default createDenominator;