我想使用一个自定义的联合体,或者通常在io-ts中使用一个自定义类型。
我收到一个错误,例如T.array(T.type(MyUnion))
你能告诉我实现这一目标的正确途径是什么吗?
import * as T from 'io-ts';
import * as E from 'fp-ts/Either';
import { pipe } from 'fp-ts/lib/function';
console.clear();
type MyUnion = 'item-a' | 'item-b' | 'item-c';
const test1 = T.type({
data: T.array(T.string),
});
pipe(test1.decode({ data: ['hello'] }), E.fold(console.error, console.log)); // OK
const test2 = T.type({
data: T.array(T.type(MyUnion)), // ERROR
});
pipe(test2.decode({ data: ['hello'] }), E.fold(console.error, console.log));
1条答案
按热度按时间oo7oh9g91#
您需要定义一个名为
MyUnion
的变量,以便可以在运行时首先使用:但是再次使用这个方法是非常多余的
幸运的是,io-ts有一个内置的类型
TypeOf
,它将io-ts类型的类型作为TS类型,这样就消除了冗余:然后你就可以将
MyUnion
同时用作io-ts类型(在运行时)和TS类型(在编译时):Playground