我有以下型別:
type field_<T> =
{
value: T;
error:
{
error: boolean;
message: string;
}
visited: boolean;
validate: (value: T) => boolean;
}
以及一個包含所有欄位的表單:
interface form_model_
{
firstName: field_<string>;
lastName: field_<string>;
}
等等..
我想以類似于以下方式收集所有value欄位:
type value_type<form_model_interface_> = {
[key_ in keyof form_model_interface_]: ?*?;
}
什么會取代?*?或者有更好的方法嗎?
uj5u.com熱心網友回復:
有兩種選擇。
第一個條件型別:
type field_<T> =
{
value: T;
error:
{
error: boolean;
message: string;
}
visited: boolean;
validate: (value: T) => boolean;
}
interface form_model_ {
firstName: field_<string>;
lastName: field_<string>;
}
type value_type<form_model_interface_> = {
[key_ in keyof form_model_interface_]: form_model_interface_[key_] extends field_<any> ? form_model_interface_[key_]['value'] : never
}
// type Result = {
// firstName: string;
// lastName: string;
// }
type Result = value_type<form_model_>
操場
第二個具有適當約束的form_model_interface_泛型 in value_type。請記住,在這種情況下,您需要定義form_model_為 atype而不是interface因為type 默認情況下已編入索引
type field_<T> =
{
value: T;
error:
{
error: boolean;
message: string;
}
visited: boolean;
validate: (value: T) => boolean;
}
type form_model_ = {
firstName: field_<string>;
lastName: field_<string>;
}
type value_type<form_model_interface_ extends Record<string, field_<any>>> = {
[key_ in keyof form_model_interface_]: form_model_interface_[key_]['value']
}
// type Result = {
// firstName: string;
// lastName: string;
// }
type Result = value_type<form_model_>
操場
請注意,打字稿中有命名約定。所有型別都應該大寫和駝峰式。所以field_應該寫成Field.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402432.html
標籤:
