我已经遇到过几次关于类型限制的报错,例如:
res.json(<Foo>{foo:'bar'});
上面的cast/assertion语句在匿名对象没有Foo
类型的所有字段时仍然有效。
例如,我遇到的问题是: https://stackoverflow.com/questions/53328459/prevent-compilation-unless-all-fields-exist
这个功能请求是希望实现类似以下内容的功能:
res.json(Exact<Foo>{foo:'bar'});
res.json(Subset<Foo>{foo:'bar'});
res.json(Superset<Foo>{foo:'bar'});
请注意,这与现有的构造Partial
相似,例如Partial<T>
,希望上述内容能够自解释。我不确定Subset<>
和Superset<>
是否都有意义,但其中一个应该是有意义的。
5条答案
按热度按时间fae0ux8s1#
精确类型 #12936
6kkfgxo02#
Also #26064
camsedfj3#
再次审视这个问题,我认为
Subset<T>
和Superset<T>
都有意义。示例:Subset<T>
的作用类似于Assert:Assert是vprime
不能有任何不在 T 中的字段。返回的只包含v
中的内容,而不是T
中的内容。接下来我们有超集:
超集的作用类似于Assert:它Assert vprime 包含
T
中的所有字段。从Assert中返回v
的类型,而不是T
。mqkwyuun4#
这个能用吗?
4nkexdtk5#
@jack-williams 可能,除了我正在寻找使用它与一个匿名对象,如下所示:
它需要是一个Assert,就像那样...也就是说,这样做有点让我失望:
我认为使用匿名对象是更高层次的目标。