如何使用 keyof 属性定义通用打字稿类型?

奥布洛明戈

我希望有一个泛型类型以在某些函数中将其用作参数,但尚不清楚如何定义具有强类型属性名称的属性(示例代码片段中的specificProperties)。

type Config<T> = {
    specificProperties: keyof T[],
    data: T[],
}

function doSomething<T>(config: Config<T>) {
    // Some logic here
}

用法:

type Test = {
    code: string,
    name: string,
}

const config: Config<Test> = {
    specificProperties: [ 'code' ], //Typescript error here
    data: [
        {
            code: 'a',
            name: 'b'
        }
    ]
}

doSomething(config)

Typescript 抛出错误:属性“specificProperties”的类型不兼容。类型 'string[]' 不能分配给类型 'keyof T[]'。

似乎配置类型应该是固定的,但我不知道该怎么做。有任何想法吗?

托拜厄斯·S。

更改keyof T[](keyof T)[]括号的优先级高于keyof运算符。

type Config<T> = {
    specificProperties: (keyof T)[],
    data: T[],
}

操场

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用keyof运算符获取打字稿类的属性的类型

打字稿:keyof返回值的通用类型限制

如何使用符号作为 keyof 类型

打字稿:如何为通用类型定义对象键的类型

打字稿使用keyof时,索引签名参数类型必须是“字符串”或“数字”

使用keyof枚举和泛型的打字稿

如何使用名为“keyof”类型的属性创建对象文字

无法使用打字稿为通用比较功能定义类型

keyof typeof通用约束如何工作?

打字稿,类型 R 和 K 扩展了 keyof R,如何声明 R[K] 是字符串类型

使用keyof进行参数通用推断

对键及其类型使用通用的keyof进行设置操作

如何使用 TypeScript "keyof" 创建通用 API 接口的接口?

使用条件属性/限制在打字稿中定义类型

打字稿:定义类似keyof的类型,但具有特定的值类型

我如何要求keyof用于特定类型的属性?

通用`keyof`中的打字稿混淆扩展了keyof`typeof和其他

打字稿:如何通过通用参数的属性和其他类型来限制属性选择?

打字稿相同键但嵌套不同类型(keyof但嵌套)

字符串类型的打字稿 T[keyof T]

在打字稿中过滤keyof类型参数

打字稿泛型,正在使用keyof,但TS也会使用符号| 编号| 以及字符串

在打字稿中获取`keyof`非可选属性名称

打字稿:与“ keyof接口”相比,“ keyof typeof值”产生不同的类型结果

如何使用带有TypeScript的keyof访问器定义返回类型?

使用通用键和预定义的键声明打字稿类型

如何导入打字稿中的类型定义?

打字稿:如何定义重载函数类型

打字稿如何定义多个类型数组