51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
interface Number {
|
|
toString(): string;
|
|
valueOf(): number;
|
|
constructor: NumberConstructor;
|
|
}
|
|
interface NumberConstructor {
|
|
(val: any): number;
|
|
new (val: any): Number;
|
|
prototype: Number;
|
|
parseInt(val: unknown): number;
|
|
parseFloat(val: unknown): number;
|
|
}
|
|
|
|
declare var Number: NumberConstructor;
|
|
declare var parseInt: typeof Number.parseInt;
|
|
declare var parseFloat: typeof Number.parseFloat;
|
|
declare var NaN: number;
|
|
declare var Infinity: number;
|
|
|
|
gt.Number = function(this: Number | undefined, arg: any) {
|
|
var val;
|
|
if (arguments.length === 0) val = 0;
|
|
else val = arg - 0;
|
|
if (this === undefined || this === null) return val;
|
|
else (this as any).value = val;
|
|
} as NumberConstructor;
|
|
|
|
Number.prototype = (0 as any).__proto__ as Number;
|
|
setConstr(Number.prototype, Number);
|
|
|
|
setProps(Number.prototype, {
|
|
valueOf() {
|
|
if (typeof this === 'number') return this;
|
|
else return (this as any).value;
|
|
},
|
|
toString() {
|
|
if (typeof this === 'number') return this + '';
|
|
else return (this as any).value + '';
|
|
}
|
|
});
|
|
|
|
setProps(Number, {
|
|
parseInt(val) { return Math.trunc(Number.parseFloat(val)); },
|
|
parseFloat(val) { return internals.parseFloat(val); },
|
|
});
|
|
|
|
Object.defineProperty(gt, 'parseInt', { value: Number.parseInt, writable: false });
|
|
Object.defineProperty(gt, 'parseFloat', { value: Number.parseFloat, writable: false });
|
|
Object.defineProperty(gt, 'NaN', { value: 0 / 0, writable: false });
|
|
Object.defineProperty(gt, 'Infinity', { value: 1 / 0, writable: false });
|