[英]Typescript: Mapped types with Interface
当尝试将映射类型与接口一起使用时,我收到一个奇怪的错误——这让我觉得根本不可能将它们一起使用。
查看相同的类型和接口声明:
type AllWorks<T> = {
[K in keyof T]: T[K];
}
interface DoesNotWork<T> {
[K in keyof T]: T[K];
}
虽然第一个按预期工作,但第二个给出了 TS 错误:
[ts] A computed property name must be of type 'string', 'number', 'symbol', or 'any'.
[ts] Member '[K in keyof' implicitly has an 'any' type.
[ts] Cannot find name 'keyof'.
所以我的问题是 -甚至可以映射接口吗? 如果是 - 那么如何?
到目前为止,在 TypeScript(从版本 2.7.2 开始)中,接口中的联合类型签名是不允许的,而应该使用映射类型(正如您正确使用的那样)。
文件。
接口不是为了这样的目的而构建的。 您应该在那里使用Type
。
Typescript 编译器告诉你,你使用了错误的工具来完成这项工作:)
接口可以做的最复杂的事情是extend
,否则使用映射类型作为一般规则。
如果你想深入挖掘,我在这里写了一篇关于映射类型的文章。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.