我使用 create-react-app 在 react 和 typescript 中开发了这个项目。我在整个开发过程中都没有遇到任何问题。现在我想将我的一个组件发布到 npm。
我意识到我需要在现有应用程序的上下文之外构建它才能发布组件。
当我尝试通过 tsc 自己编译打字稿时,它在导入这样的类型的地方给了我语法错误:
src/index.ts:18:1 - error TS1128: Declaration or statement expected.
18 export type {
~~~~~~
src/index.ts:18:13 - error TS1005: ';' expected.
18 export type {
~
src/index.tsx:22:1 - error TS1128: Declaration or statement expected.
22 export type {
~~~~~~
src/index.tsx:22:13 - error TS1005: ';' expected.
22 export type {
~
我的tsconfig是这样的(暗中拍了几张之后):
{
"compilerOptions": {
"target": "es6", //Changed from es5 per Erik's suggestion, problem persists
"lib": [
"dom",
"dom.iterable",
"ESNext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "ESNext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
我也遇到了关于其他库的错误,比如 Ramda:
例如
node_modules/@types/ramda/index.d.ts:1949:120 - error TS1110: Type expected.
1949 export function toPairsIn<O extends object, K extends Extract<keyof O, string | number>>(obj: O): Array<{ [key in K]: [`${key}`, O[key]] }[K]>;
~~~
node_modules/@types/ramda/index.d.ts:1949:136 - error TS1005: ';' expected.
1949 export function toPairsIn<O extends object, K extends Extract<keyof O, string | number>>(obj: O): Array<{ [key in K]: [`${key}`, O[key]] }[K]>;
~
node_modules/@types/ramda/index.d.ts:1949:138 - error TS1128: Declaration or statement expected.
1949 export function toPairsIn<O extends object, K extends Extract<keyof O, string | number>>(obj: O): Array<{ [key in K]: [`${key}`, O[key]] }[K]>;
~
我已经在这个问题上浪费了一天时间,我唯一的目标是发布这个组件,因此对于这方面的任何帮助,我们将不胜感激。我更想弄清楚为什么我的打字稿在没有 react 脚本的情况下无法正确编译,但如果有另一种方法可以发布它,那么也可以。
答案 0 :(得分:2)
export
关键字是 ES6 语法。在您的 compilerOptions
中,您的 target
是 ES5,因此存在错误。
答案 1 :(得分:1)
我最终通过使用这个过程解决了这个问题:
我认为 create react app 使用的是比我更新的打字稿版本......假设我应该这样做yarn add typescript@next