Ссылка на проект Typescript 3 со сторонней библиотекой (из npm) - PullRequest
0 голосов
/ 21 сентября 2018

Я использую Typescript и пытаюсь создать фоновую синхронизацию с сервисным работником.Кто-то предложил мне сделать это:

Вы можете разбить ваш проект на несколько частей с помощью отдельных файлов tsconfig.json: одна часть, включающая dom lib, и одна часть, содержащаявеб-работник lib.Вы можете сделать еще одну часть для общего кода, который не зависит ни от одной библиотеки.Вы можете использовать ссылки проекта, чтобы помочь автоматизировать сборку.Если это не решит проблему полностью, обновите вопрос, чтобы описать остающиеся проблемы.

Во-первых, я хочу признать, что я могу принципиально неправильно использовать ссылку на проект, поэтому, пожалуйста, помилуйте меня, добрые людив Интернете.

, поэтому сейчас структура моего проекта выглядит следующим образом:

root:
├── node_modules
│   └── [..... all the packages]
├── src
│   ├── tsconfig.json
│   └── [other source files]
├── srcWebWorker
│   └── tsconfig.json
├── structure.txt
├── tsconfig.base.json
└── tsconfig.json

В src / tsconfig.json я использую lib dom, потому что он мне нужен для кода неработающего рабочего:

{
    "extends": "../tsconfig.base",
    "compilerOptions": {
        "lib": [ "es6", "dom", "esnext"], // ** notice I use "dom" here
    }, 
}

. / SrcWebworker / tsconfig.json:

{
    "extends": "../tsconfig.base",
    "compilerOptions": {
        // "outFile": "../built/local/tsc.js",
        "lib": [ "webworker" ],
    },
    "files": [

    ],
    "references": [

    ]
}

tsconfig.base.json, на который ссылается src / tsconfig.json:

{

    "compilerOptions": {
        "baseUrl": ".",
        "outDir": "build/dist",
        "module": "esnext",
        "target": "es6",
        "sourceMap": true,
        "allowJs": true,
        "jsx": "react",
        "moduleResolution": "node",
        "rootDir": "./src",
        "forceConsistentCasingInFileNames": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noImplicitAny": true,
        "strictNullChecks": true,
        "suppressImplicitAnyIndexErrors": true,
        "noUnusedLocals": true
    }, 
    "exclude": [
        "node_modules",
        "build",
        "scripts",
        "acceptance-tests",
        "webpack",
        "jest",
        "src/setupTests.ts"
    ]
}

tsconfig.jsonв корне:

{
    "files": [],
    "include": [],  
    "composite": true,
    "references": [
        { "path": "./src" }
    ]
}

Моя теория состоит в том, что scr / tsconfig будет ссылаться и расширять tsconfig.base.json, и, следовательно, код внутри ./src сможет использовать --lib "dom."Однако, когда я попытался скомпилировать, произошла эта ошибка:

/Users/shunxuhuang/Projects/hemera/mainapp/node_modules/@types/graphql/subscription/subscribe.d.ts (17,12): Не удается найти имя 'AsyncIterator'.

Я могу решить эту ошибку, добавив lib dom в tsconfig.json в корне, но тогда мне не нужен кодв srcWebworker, чтобы использовать его, поскольку он конфликтует с lib webworker

Я пытался tsc --build, и он возвращает

node_modules/@types/react-dom/index.d.ts(19,72): error TS2304: Cannot find name 'Text'.
node_modules/popper.js/index.d.ts(93,13): error TS2304: Cannot find name 'CSSStyleDeclaration'.
node_modules/popper.js/index.d.ts(94,18): error TS2304: Cannot find name 'CSSStyleDeclaration'.
node_modules/popper.js/index.d.ts(122,30): error TS2304: Cannot find name 'ClientRect'.

Примечание: я использовал этот шаблон чтобы создать мой проект, чтобы мне не приходилось иметь дело с веб-упаковкой, но я вполне могу выбросить, если это необходимо.

Спасибо: =)

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Попробуйте ответ # 1 здесь .Это добавление

    "lib": ["es2017", "esnext", "esnext.asynciterable"]

к моему tsconfig.json сделало это для меня.

0 голосов
/ 22 сентября 2018

Попробуйте изменить настройку lib в ./srcWebworker/tsconfig.json на ["es6", "webworker", "esnext"].AsyncIterator определяется в esnext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...