TypeScript Map Implementation
This library, `typescript-map`, provides a lightweight, TypeScript-first implementation of an ES6 Map-like data structure. Currently at version 0.1.0, it is designed for scenarios where a full ES6 Map polyfill is not desired or where bundle size is a critical concern, weighing in at just over 1 kilobyte gzipped. A key differentiator is its deliberate simplicity: it does not employ a hashing function. While this keeps the implementation small and straightforward, it means the library is explicitly *not* recommended for use with more than a few hundred keys or in performance-critical "hot path" operations, where native `Map` or more robust alternatives like `es6-map` would be superior. The release cadence appears to be slow or inactive given the low version number and its niche purpose. It is primarily intended for TypeScript projects needing a basic, type-safe map collection without significant overhead.
Common errors
-
TypeError: TSMap is not a constructor
cause Attempting to call `TSMap` directly without the `new` keyword, or incorrect CommonJS import.fixEnsure you are instantiating the class with `new TSMap()` and that your CommonJS import is `const TSMap = require('typescript-map').TSMap;`. -
Error: Cannot read properties of undefined (reading 'set')
cause Trying to call methods on an uninitialized or incorrectly imported `TSMap` instance.fixVerify that `TSMap` has been correctly imported and instantiated (e.g., `const myMap = new TSMap();`). -
Argument of type 'TSMap<string, number>' is not assignable to parameter of type 'Map<string, number>'
cause Passing a `TSMap` instance to a function or API that specifically expects a native `Map` object.fixThis library is not a polyfill for the native `Map`. If native `Map` compatibility is required, consider using `es6-map` or adapting your code to accept `TSMap` where appropriate, or converting `TSMap` to a standard object if only basic iteration is needed.
Warnings
- gotcha This library is not an ES6 Map polyfill. It provides a similar interface but is a separate implementation. Do not expect it to patch `Map` or behave identically to the native `Map` specification in every edge case.
- gotcha Performance will degrade significantly for maps containing hundreds or thousands of keys, or when used in performance-critical code paths. The implementation does not use a hashing function to keep it small and simple.
- gotcha When included directly in a browser via a `<script>` tag, the `TSMap` class is exposed as a global variable. This can lead to global namespace pollution or conflicts with other libraries.
Install
-
npm install typescript-map -
yarn add typescript-map -
pnpm add typescript-map
Imports
- TSMap
import TSMap from 'typescript-map'
import { TSMap } from 'typescript-map' - TSMap
const { TSMap } = require('typescript-map');const TSMap = require('typescript-map').TSMap; - TSMap
<script src="tsmap.min.js"></script> // Then use global TSMap
Quickstart
import { TSMap } from 'typescript-map';
// Basic usage, similar to native Map
const myMap = new TSMap();
myMap.set('foo', 'bar');
console.log(myMap.get('foo')); // Prints: bar
// With TypeScript generics for type safety
const typedMap = new TSMap<string, number>();
typedMap.set('apple', 1);
typedMap.set('banana', 2);
console.log(typedMap.get('apple')); // Prints: 1
// Initialize with an array of key-value pairs
const initMap = new TSMap<string, string>([
['key1', 'valueA'],
['key2', 'valueB']
]);
console.log(initMap.size); // Prints: 2
// Example of a custom function: fromJSON
const jsonMap = new TSMap().fromJSON({
name: 'Alice',
age: 30,
city: 'New York'
}, false);
console.log(jsonMap.get('name')); // Prints: Alice