Comments (7)
I'm looking at how this could look like. Not entirely sure how we should do this though. The predicate should return itself to be able to chain it, so we can't do something like this.
minLength(length: number) {
return (value: string) => {
if (value.length < number) {
return `Expected string length to be minimum ${number}`;
}
};
}
Have to dig deeper if we have nice way of doing this.
from ow.
Maybe we could use Proxies to make it easier?
from ow.
Alternatively, we could iterate over each method in our class before using it and wrap it in another function.
from ow.
Or maybe use TypeScript decorators.
from ow.
Was thinking about decorators as well. But I think you would then write your logic in your decorator :p. Going to experiment with proxies first.
@Predicate({
message: 'Value should be alphanumeric',
validator: x => /^[0-9\d]+$/i.test(x)
})
get alphanumeric() {
return this;
}
from ow.
That looks weird. I was thinking the predicate
decorator didn't take any arguments but instead wrapped the following function so it would return this
, but I still think Proxy might be easier. I like your separation of message and validation though.
from ow.
I tried a bunch of things in the meantime. Not sure we could actually make this work with automatic type definitions.
This is what I got
export class StringPredicate extends Predicate {
constructor(context?: Context) {
super('string', context);
}
@Validator()
minLength(number: number) {
return {
message: () => `Expected string length to be minimum ${number}`,
validator: (value: string) => value.length < number
};
}
}
The thing is that de type definitions think that I return an object with message
and validator
although I change the return type with the decorator.
So this actually works perfectly, the only thing is that the type definitions do not match with what we're having at runtime... I'm looking into it, if we can change that behaviour but I don't think we can.
Keep you posted!
from ow.
Related Issues (20)
- Bug: `isValid` wrong typing HOT 3
- Package does not seem to work on node v8 `SyntaxError: Unexpected token {` HOT 1
- string.nonBlank validator HOT 1
- Error running with metro bundler
- generate objects from predicate HOT 3
- use browser-side HOT 1
- Unclear error message when checking NaN against the number type HOT 7
- Composition HOT 3
- Is there a way for an object predicate to differentiate between key with value `undefined`, and key not present? HOT 2
- should `ow.string.equals` be narrowing the type to specific strings? HOT 1
- wrong message: Expected `e` to be of type .... - instead of Expected argument to be of type HOT 3
- Show all possible errors exhaustively (option?)
- const values HOT 1
- Q: how to make custom type narrowing validator (i.e. Predicate<x>)? HOT 3
- metadata
- Documentation is 404
- Build errors when using ow in React app compiled with vite
- Upgrading to 1.1.0 from older version makes TS complain HOT 6
- correct pattern for optional 'required' properties?
- Cannot find module 'ow' or its corresponding type declarations HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ow.