我有一个无头CMS,为我的GraphQL模式生成所有类型。
执行查询后,我得到一个我可以使用的结果。结果包含一个数组。
当我需要在从服务器返回的数组上使用过滤器,映射或查找方法时,我得到一个属性'filter/map/find'不存在于类型'TypeName'
通过Visual Studio可以快速解决这个问题,但是它会在自动生成的文件中添加类型。我的解决方案是在一个单独的文件中扩展类型,这是可行的
import { DataEntity } from './__generated__/graphql'
interface DataEntityWithMethods extends DataEntity {
filter(arg0?: (grouping: DataEntity) => DataEntity): unknown
find(arg0?: (group: DataEntity) => boolean): unknown
map(arg0?: (group: DataEntity) => void): unknown
}
export type { DataEntityWithMethods }
但是这是最好的方法吗?我发现很奇怪,我需要将默认的JS方法添加到创建的类型中。
TypeScript是这样工作的吗?
不!
当你设置一个包含数组的变量的类型时,你需要在它后面添加[]来告诉TypeScript它是一个数组,而不是一个对象。
:
let data: DataEntity[]
如果你这样做,你不需要为对象注册任何方法。
请注意,TypeScript并没有在第一个地方识别出这个问题,并建议一个快速修复,这是一个错误的处理问题的方式。