如何Assert表达式必须符合某种类型,同时保留其精确的文本类型?
type Foo = {
foo: string;
}
const foobar = { foo: "foo", bar: "bar"};
// should infer typeof foobar but fail when it is not subtype of Foo
const fooLike = requireSubtype<Foo>({ foo: "foo", bar: "bar"});
// preserves .bar
fooLike.bar;
// this should fail to typecheck due to missing .foo
requireSubtype<Foo>({bar: "bar"});
我能想到的最接近的说法是:
const requireSubtype = <U>() => <T extends U>(o: T): T => o;
const foo2 = requireSubtype<Foo>()({ foo: "", bar: "" })
但是这需要中间功能并且是丑陋的。
只有一个函数的解决方案是很好的,没有函数(纯粹带有类型约束)是理想的。
1条答案
按热度按时间oprakyz71#
但是这需要中间功能并且是丑陋的。
直到最近,这还是唯一的办法。
现在,我们有了
satisfies
运算符,它几乎可以完成您所寻找的内容:Playground