我正在编写一个函数,通过将字段名作为参数传递来判断是否需要字段.我希望函数只接受那些在配置类型中映射到具有Required属性的ValidationConfig的字段名称.我知道我可以将函数参数类型设置为ValidationField,如下所示,它起作用了.
type Field = 'name' | 'surname' | 'age' | 'height' | 'school';
type ValidationField = Extract<Field, 'name' | 'surname'>;
type RequiredConfig = {required?: boolean};
type ValidationConfig<T> = T extends ValidationField ? RequiredConfig : {};
type Config = {
[K in Field]?: ValidationConfig<K> & {visible?: boolean};
}
const config: Config = {name: {required: true, visible: true}, surname: {required: true, visible: true}, age: {visible: false}}
const checkRequired = (field: ValidationField) => config[field]?.required
然而,我想知道,如果我们不能访问Validationfield类型,而只能访问Config、验证配置和RequiredConfig类型,是否有方法实现相同的行为?
const checkRequired = <T extends Field>(field: Config[Field] extends ...? T : never) => config[field]?.required