diff options
author | andrewdkim <adkim414@gmail.com> | 2019-11-12 17:30:02 -0500 |
---|---|---|
committer | andrewdkim <adkim414@gmail.com> | 2019-11-12 17:30:02 -0500 |
commit | fb3a8258298589b911c73c18fdb086c8815e27c8 (patch) | |
tree | c97973e8cc2d828b9ce7486b421fdcf2985c49e2 /src/extensions/ArrayExtensions.ts | |
parent | 4d4db3aecf54a501a981c239feacdfddfe71152c (diff) | |
parent | ecbe527575bab2cb5f1ced278039ec0a6fc50809 (diff) |
merge from master
Diffstat (limited to 'src/extensions/ArrayExtensions.ts')
-rw-r--r-- | src/extensions/ArrayExtensions.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/extensions/ArrayExtensions.ts b/src/extensions/ArrayExtensions.ts new file mode 100644 index 000000000..8e125766d --- /dev/null +++ b/src/extensions/ArrayExtensions.ts @@ -0,0 +1,37 @@ +export default class ArrayExtension { + private readonly property: string; + private readonly body: <T>(this: Array<T>) => any; + + constructor(property: string, body: <T>(this: Array<T>) => any) { + this.property = property; + this.body = body; + } + + assign() { + Object.defineProperty(Array.prototype, this.property, { + value: this.body, + enumerable: false + }); + } + +} + +/** + * IMPORTANT: Any extension you add here *must* have a corresponding type definition + * in the Array<T> interface in ./General/ExtensionsTypings.ts. Otherwise, + * Typescript will not recognize your new function. + */ +const extensions = [ + new ArrayExtension("lastElement", function () { + if (!this.length) { + return undefined; + } + return this[this.length - 1]; + }) +]; + +function Assign() { + extensions.forEach(extension => extension.assign()); +} + +export { Assign };
\ No newline at end of file |