![pnpm 9.5 Introduces Catalogs: Shareable Dependency Version Specifiers](https://cdn.sanity.io/images/cgdhsj6q/production/c06a5b74512bcc6da29d38cef96a454fa947810d-1024x1024.webp?w=400&fit=max&auto=format)
Security News
pnpm 9.5 Introduces Catalogs: Shareable Dependency Version Specifiers
pnpm 9.5 introduces a Catalogs feature, enabling shareable dependency version specifiers, reducing merge conflicts and improving support for monorepos.
immutable-record-typings
Advanced tools
Changelog
v0.1.0
Readme
Typings for Immutable Record which provides better type safety out of the box.
This plugin requires minimum immutable 3.8.1, typescript 2.3.0
npm install --save-dev immutable-record-typings
There are two ways to enable typings augmentation:
Recommended way is adding "./node_modules/immutable-record-typings/*"
to include
section in your tsconfig.json
, here is an example:
{
"compilerOptions": {},
"include": [
"./src/**/*",
"./node_modules/immutable-record-typings/*"
]
}
You can also import 'immutable-record-typings'
in entry file of your application instead of adding it to tsconfig.json
.
We don't provide it as a @types
package because it would be not compatible with current typings.
So the safer way is to provide it as a separate npm package.
Also, Immutable v4 is on the way with similar typings :)
This package adds generic type to the Record
definition. Thanks to this, we can make records type safe
(excluding mergeIn
, mergeDeepIn
, setIn
, deleteIn
, removeIn
and updateIn
methods - typescript limitations).
Let's say that we have Post.ts
file:
import { Record, List } from 'immutable';
import { User } from './User';
import { Comment } from './Comment';
// we use PascalCase because of names conflicts issue in records -
// for example, a groupBy field will not work, because Record already has the groupBy method
export interface Post {
Title: string;
Author: User;
Content: string;
Comments: List<Comment>;
}
export const PostRecord = Record<Post>({
Title: '',
Author: undefined,
Content: '',
Comments: List<Comment>()
});
Or if we are minimalist. we can make it even shorter - typescript will guess PostRecord
type:
import { Record, List } from 'immutable';
import { UserRecord } from './User';
import { CommentRecord } from './Comment';
export const PostRecord = Record({
Title: '',
// we can't just set `undefined` - typescript will not be able to guess Author field type
// it's a small hack here - there is no `UNDEFINED` field on `UserRecord` object so the value will be `undefined`
// but because of typings (UNDEFINED: Record<T>) - it will use proper type :)
Author: UserRecord.UNDEFINED,
Content: '',
// another special field - it's the same as UserRecord.UNDEFINED, but with more suitable name
Comments: List<typeof CommentRecord.INSTANCE>()
});
To create new record object, we can use functional or object-oriented approach:
import { PostRecord } from './Post';
const postA = PostRecord({ Title: 'TypeScript is awesome!' });
const postB = new PostRecord({ Title: 'Immutable.js too' });
To extend record class, we can use extends
keyword:
import { PostRecord } from './Post';
import { UserRecord } from './User';
export class AwesomePost extends PostRecord {
get Title(): string {
return `[AWESOME NEWS] ${this.get('Title')}!`;
}
}
MIT
FAQs
Unknown package
We found that immutable-record-typings demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 9.5 introduces a Catalogs feature, enabling shareable dependency version specifiers, reducing merge conflicts and improving support for monorepos.
Security News
A threat actor on BreachForums is selling an unverified npm vulnerability for account takeover, but npm has not officially confirmed the existence of this security concern.
Security News
Cyber insurance rates are dropping as the market matures, according to a new report projecting global premiums to reach $43 billion by 2030, driven by international market uptake and growth in the SME sector.