打字稿添加不需要的字符串类型以键入别名属性

索问

我有以下代码

type ValidateFn = (value: any) => boolean;

type ValidationSchema<T> = {
    [P in keyof T]: Array<ValidateFn> | ValidateFn | ValidationSchema<T[P]>
}

interface Person {
    name?: string;
    age?: number;
}

const obj: ValidationSchema<Person> = {
    'name': 'test' // <-- problem is here
}

Typescript编译器说ValidationSchema的字段是

string | ValidateFn | ValidateFn[]

哪里string来的

贾卡尔兹

形式的映射类型{[K in keyof T]: ...}其中T有一些类型参数)称为homomorphic,如microsoft / TypeScript#12447所介绍的(将其称为isomorphic)。在该请求请求中,它说

当用T同构映射类型替换原始类型时,我们仅产生该原始类型。

如果输入类似的原始类型string,则会出现相同的原始类型:

type SomeHomomorphicMappedType<T> = { [K in keyof T]: Date };
type MappedString = SomeHomomorphicMappedType<string>; // string

由于ValidationSchema是同态映射的递归式,当它递归向下进入nameage的性质Person,它被用作ValidationSchema<string | undefined>用于nameValidationSchema<number | undefined>年龄。原始输入,原始输出:

type VSP = ValidationSchema<Person>
/* type VSP = {
    name?: string | ValidateFn | ValidateFn[] | undefined;
    age?: number | ValidateFn | ValidateFn[] | undefined;
} */

所以,这可以解释。


如果您想要其他行为,则可能需要使用条件类型在不存在时T extends object与不存在时进行不同的操作。可能是这样的:

type ValidationSchemaMaybe<T> = {
  [P in keyof T]: Array<ValidateFn> | ValidateFn | (
    T[P] extends object ? ValidationSchemaMaybe<T[P]> : never
  );
}

type VSPMaybe = ValidationSchemaMaybe<Person>
/* type VSPMaybe = {
    name?: ValidateFn | ValidateFn[] | undefined;
    age?: ValidateFn | ValidateFn[] | undefined;
} */

好的,希望能有所帮助;祝好运!

操场上的代码链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从JSON删除不需要的字符串属性

来自分类Dev

策略-键入打字稿的字符串

来自分类Dev

jQuery向字符串中添加不需要的字符?

来自分类Dev

将字符串保存到 MySQL 数据库后添加不需要的字符

来自分类Dev

Yii CDbCriteria添加不需要的别名

来自分类Dev

从字符串中删除不需要的字符

来自分类Dev

HTML查询字符串删除不需要的字符

来自分类Dev

遍历字符串以查找不需要的字符

来自分类Dev

遍历字符串以查找不需要的字符

来自分类Dev

从字符串中删除不需要的字符的函数

来自分类Dev

Android Studio会自动在不需要的字符串中添加斜杠

来自分类Dev

不需要的“ UserControl /”字符串已自动添加到Imagein Repeater中

来自分类Dev

Lucene-不需要索引的字符串字段

来自分类Dev

为什么compareSync不需要盐字符串?

来自分类Dev

不需要的新行字符串/ fputcsv

来自分类Dev

RewriteRule追加不需要的字符串

来自分类Dev

字符串删除后的Python不需要的空行

来自分类Dev

从改造响应中删除不需要的字符串

来自分类Dev

逗号导致不需要的字符串拆分

来自分类Dev

打字稿:命名属性类型必须可分配给字符串索引器类型

来自分类Dev

打字稿编译不需要/必需的源

来自分类Dev

XSD.exe会以枚举类型而不是文件中指定的数字值生成不需要的字符串值

来自分类Dev

正则表达式将不需要的花括号添加到匹配的字符串中

来自分类Dev

从Python中json的字符串值中删除不需要的子字符串

来自分类Dev

字符串枚举,如打字稿中的类型

来自分类Dev

从联合类型打字稿生成字符串数组

来自分类Dev

缩小基于打字稿中字符串文字的类型?

来自分类Dev

打字稿:如何从字符串数组定义类型?

来自分类Dev

代码需要分割字符串并删除不需要的字符

Related 相关文章

  1. 1

    如何从JSON删除不需要的字符串属性

  2. 2

    策略-键入打字稿的字符串

  3. 3

    jQuery向字符串中添加不需要的字符?

  4. 4

    将字符串保存到 MySQL 数据库后添加不需要的字符

  5. 5

    Yii CDbCriteria添加不需要的别名

  6. 6

    从字符串中删除不需要的字符

  7. 7

    HTML查询字符串删除不需要的字符

  8. 8

    遍历字符串以查找不需要的字符

  9. 9

    遍历字符串以查找不需要的字符

  10. 10

    从字符串中删除不需要的字符的函数

  11. 11

    Android Studio会自动在不需要的字符串中添加斜杠

  12. 12

    不需要的“ UserControl /”字符串已自动添加到Imagein Repeater中

  13. 13

    Lucene-不需要索引的字符串字段

  14. 14

    为什么compareSync不需要盐字符串?

  15. 15

    不需要的新行字符串/ fputcsv

  16. 16

    RewriteRule追加不需要的字符串

  17. 17

    字符串删除后的Python不需要的空行

  18. 18

    从改造响应中删除不需要的字符串

  19. 19

    逗号导致不需要的字符串拆分

  20. 20

    打字稿:命名属性类型必须可分配给字符串索引器类型

  21. 21

    打字稿编译不需要/必需的源

  22. 22

    XSD.exe会以枚举类型而不是文件中指定的数字值生成不需要的字符串值

  23. 23

    正则表达式将不需要的花括号添加到匹配的字符串中

  24. 24

    从Python中json的字符串值中删除不需要的子字符串

  25. 25

    字符串枚举,如打字稿中的类型

  26. 26

    从联合类型打字稿生成字符串数组

  27. 27

    缩小基于打字稿中字符串文字的类型?

  28. 28

    打字稿:如何从字符串数组定义类型?

  29. 29

    代码需要分割字符串并删除不需要的字符

热门标签

归档