我目前正在尝试编写一个 codemod,它将$ReadOnly<T>
从 TypeScript 代码库中删除所有泛型,仅保留T
(T
作为对象/联合)
到目前为止,这就是我想出的
module.exports = (fileInfo, api) => {
const j = api.jscodeshift
const source = j(fileInfo.source)
source
.find(j.TSTypeAliasDeclaration)
.find(j.TSTypeReference)
.filter(x => {
return x.value.typeName.name === '$ReadOnly' && x.value.typeParameters.params[0].type === 'TSTypeLiteral'
})
.replaceWith(nodePath => {
const members = []
nodePath.value.typeParameters.params[0].members.forEach(x => {
members.push(j.tsPropertySignature(x.key, x.typeAnnotation))
})
return j.tsTypeLiteral(members)
})
return source
.toSource()
}
我们的想法是修改如下内容:
export type MyType = $ReadOnly<{
someProps: string,
}>
对此:
export type MyType = {
someProps: string,
}
不幸的是,这就是我最终的结果,带有重复的type
关键字:
export type type MyType = {
someProps: string,
}
知道这里可能出了什么问题吗?