numericalstring.ts 1.52 KB
Newer Older
Mathias Chouet's avatar
Mathias Chouet committed
export class NumericalString {
Mathias Chouet's avatar
Mathias Chouet committed
    private _value: string;
    private _isNumericalFlag: boolean;
Mathias Chouet's avatar
Mathias Chouet committed
    private get isNumericalFlag(): boolean {
        return this._isNumericalFlag;
Mathias Chouet's avatar
Mathias Chouet committed
        return this.isNumericalFlag;
    }

    /**
     * nécessaire car si on surcharge un des accesseurs, il faut surcharger les 2 (merci Microsoft)
     */
    get value() {
Mathias Chouet's avatar
Mathias Chouet committed
        return this._value;
Mathias Chouet's avatar
Mathias Chouet committed
        this._isNumericalFlag = undefined;
        this._value = v;
        this.updateNumericalFlag();
        if (!this.isNumerical) {
Mathias Chouet's avatar
Mathias Chouet committed
            throw new Error("invalid NumericalString '" + this._value + "' value");
    get uncheckedValueString(): string {
Mathias Chouet's avatar
Mathias Chouet committed
        if (this._value !== undefined) {
            return this._value;
    constructor(s?: any) {
Mathias Chouet's avatar
Mathias Chouet committed
        this._value = s;
        this.updateNumericalFlag();
    public toString(): string {
Mathias Chouet's avatar
Mathias Chouet committed
        return this._value + (this.isNumerical ? " [numerical]" : " [NOT numerical]");

    private updateNumericalFlag() {
Mathias Chouet's avatar
Mathias Chouet committed
        if (this.isNumericalFlag === undefined) {
            this._isNumericalFlag = false;
            if (this._value !== undefined) {
                if (typeof this.value === "string") {
Mathias Chouet's avatar
Mathias Chouet committed
                    this._isNumericalFlag = String(this.value).trim() !== "" && !isNaN(+this.value);