Comments (3)
I think it has something to do with the output type, as I could fix my error by forcing it to unknown
:
import * as io from 'io-ts';
export type Brand<T, N> = T & { __brand: N };
export type SensorId = Brand<string, 'SensorId'>;
interface SomeInterface {
id: SensorId;
}
const InterfaceCodec = io.type({
id: io.refinement(io.string, (id: string): id is SensorId => true) as io.Type<
SensorId,
unknown // <- here
>,
});
const codec: io.Type<SomeInterface, unknown> /* <- and here */ = InterfaceCodec;
How can I avoid doing that ?β―
Why is refinement
constructor not using string
(here) as output type ?β―
from io-ts.
You want to define a output interface SomeInterfaceOutput
like
interface SomeInterfaceOutput {
id: string;
}
The io.refinement
type will be io.Type<SensorId, string>
so you can define your codec
like
const codec: io.Type<SomeInterface, SomeInterfaceOutput> = InterfaceCodec;
When you now encode
your interface type io-ts
converts the SensorId
back to a string
. This is all intended behavior.
from io-ts.
Thank you for your answer.
Oh, OK, I understand that this is just because output type parameter of Type
defaults to A
β¦
Actually, I donβt care about the output type interface, I just wanted to validate that my Codec correspond to an existing type, so I wanted to infer it in some way β¦β―
I just found out I can simply use the OutputOf
helper instead of unknown :
export type Brand<T, N> = T & { __brand: N };
export type SensorId = Brand<string, 'SensorId'>;
interface SomeInterface {
id: SensorId;
}
const InterfaceCodec = io.type({
id: io.refinement(io.string, (id: string): id is SensorId => true),
});
const codec: io.Type<SomeInterface, io.OutputOf<typeof InterfaceCodec>> = InterfaceCodec;
Anyway, thanks for you answer, and thanks for the work of this lib !
from io-ts.
Related Issues (20)
- Behavior changes and types are incorrect based on `intersection` array order
- Intersection with record whose keys are a custom type HOT 1
- io-ts recursion use issue HOT 4
- Subpath imports in ESM mode HOT 5
- Clarification question - how to work with the type of codecs themselves? HOT 1
- Surprising acceptance of various inputs HOT 1
- ReadonlyNonEmptyArray can't be used in a mapped type HOT 1
- How to generate documentation for types generated with `t.TypeOf` HOT 1
- Difficulties with generic serialisable type HOT 2
- [Question] Typing a generic mapped union HOT 1
- Inference error for `toString` property in intersection types with TypeScript 4.9.5 HOT 1
- `t.TypeOf<keyof<o>>` should return a string union type, not a numeric union type.
- PSA: TS 5.1 can break using this library HOT 1
- Intersection of Function with Object doesn't validate correctly
- t.Int: use Number.isSafeInteger instead of Number.isInteger
- non-enumerable records with extra keys do not pass `io-ts.record.is`, contrary to TypeScript types HOT 12
- partially enumerable record missing enumerable keys passes `record.is`, contrary to TypeScript types
- Records are stripped when encoding with t.record(NumberFromString, xxx) HOT 2
- Question: Convert a form to a type with different structure
- Incorrect behaviour when used with browser geolocation coordinates object
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 io-ts.