我希望我的类型验证传递给React组件的“默认道具”,但是HashMap<String, String> params = new HashMap<String, String>() {{
put("globalDates", "{\"startMs\":1473672973818,\"endMs\":1481448973817,\"period\":90}");
put("limitTo","6" );
,...
}}
(为此目的而设计)没有这样做。如何获得这种行为?
resp = RestAssured.given()
.headers(headers)
.queryParameters(params)
.post(apiURL).andReturn();
答案 0 :(得分:2)
$Diff<A, B>
返回默认情况下将接受其他属性的对象类型。这意味着A
和B
上的任何属性都可以位于任何类型的$Diff<A, B>
类型的对象上。就您而言,RequiredProps
等效于{ name: string }
。因此,对象{ name: '', age: <whatever> }: RequiredProps
对于<whatever>
的任何值都是完全有效的。
您似乎真正想要的是一个对象类型,该对象类型需要RequiredProps
的所有属性,并且需要DefaultProps
中的任何属性都与该类型定义匹配。这可以通过类型
type RequiredAndDefaultProps = { ...$Exact<RequiredProps>, ...DefaultProps };
可以验证的
type Props = { name: string, age: number };
type DefaultProps = { age: number };
type RequiredProps = $Diff<Props, DefaultProps>;
type RequiredAndDefaultProps = { ...$Exact<RequiredProps>, ...DefaultProps };
({ name: 'foo' }: RequiredAndDefaultProps);
({ name: 'foo', age: 42 }: RequiredAndDefaultProps);
({ name: 'foo', age: '42' }: RequiredAndDefaultProps); // Error: age should be number
({ age: 42 }: RequiredAndDefaultProps); // Error: missing name
({ name: 'foo', bar: 'bar' }: RequiredAndDefaultProps);