繁体   English   中英

获取通用类型的属性

[英]Get property of generic type

在我们的angular6项目中,我们激活了"noImplicitAny": true设置,发现这给从泛型类型中获取值带来了一些问题。

目前,我们通过current['orderBy']检索值,但这会产生以下错误: Element implicitly has an 'any' type because type '{}' has no index signature.

我们可以通过将电流强制转换为任何(<any>current)['orderBy']来解决此问题,但是在我们看来,这是更糟糕的编码方式。

我们试图将' current['orderBy' as keyof T] ,但这不是很好的代码,并且为检索到的属性提供了错误的类型( :T[keyof T] ),在这种情况下,无法在其中使用计算(在这种情况下,它应该是数字类型)

如果您可以传递泛型类型和我们想要获取值的属性的名称,我们也试图创建一个函数(在此处找到https://blog.mariusschulz.com/2017/01/06/typescript- 2-1键和查找类型 )。

export const prop = <T, K extends keyof T>(obj: T, key: K) => { return obj[key]; };

如果current不是通用类型,则可以使用该方法,但是它会导致以下错误: Argument of type '"orderBy"' is not assignable to parameter of type 'keyof T'

那么,有谁知道另一种检索可能有用的泛型类型的属性值的方法吗? (同样在这种情况下,我们尝试检索orderBy,但是它可以是通用类型的任何其他字段)

如果您具有不受限制的类型参数,则由于typescript不知道此类访问是否有效,因此它不会让您访问该类型的任何属性。 没有noImplictAny它可以工作,因为您可以访问任何类型的任何属性。

没有任何隐含的内容,您将需要更加明确地了解泛型类型具有哪些属性以及它们可能的类型是什么:

class Foo<T extends { orderBy: string }> {
    m(current: T) {
        let o = current['orderBy']; // string
        let o2 = current.orderBy; // or just . notation
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM