-
-
Notifications
You must be signed in to change notification settings - Fork 113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proposal: validate type of object properties #141
Comments
Are you aware of any TypeScript issues about it? Would you be able to link some? From a quick search, microsoft/TypeScript#38839 looks relevant. |
I haven’t really checked the TypeScript issues before. It looks like that microsoft/TypeScript#38839 could fix this problem. I’ve also found this issue microsoft/TypeScript#34974. |
It seems likely to be extended to a function that verify the schema of an object. Some ideas are as follows. import is from '@sindresorhus/is'
import {objectEntries, objectHasOwn} from 'ts-extras';
const isInterface = <ObjectType extends Record<string, unknown>>(
value: unknown,
interface_: {
[Key in keyof ObjectType]: (value: unknown) => value is ObjectType[Key];
},
): value is ObjectType => {
return objectEntries(interface_).every(
([key, predicate]) => objectHasOwn(value, key) && predicate(value[key]),
);
};
declare const someObject: unknown;
if (
isInterface(someObject, {
foo: is.string,
bar: is.number,
baz: is.boolean,
})
) {
someObject;
// {
// foo: string;
// bar: number;
// baz: boolean;
// }
} |
There is a similar implementation in |
I would like to propose a new function
is.propertyOf(object: unknown: key: string, predicate: Predicate): boolean
that accepts 3 values and checks:key
andExample Usage:
Why
Given the following example
Unfortunately typescript is not smart enough to understand that within the
if
blockfoo
is always defined.Let’s say
is.propertyOf
is implemented similar to this:then the code from above could look like this:
The text was updated successfully, but these errors were encountered: