programing

typescript: 오류 TS2693: 'Promise'는 유형을 나타낼 뿐이지만 여기서 값으로 사용되고 있습니다.

testmans 2023. 3. 1. 09:41
반응형

typescript: 오류 TS2693: 'Promise'는 유형을 나타낼 뿐이지만 여기서 값으로 사용되고 있습니다.

AWS Lambda에서 Typescript를 사용하려고 하는데 약속을 사용할 때마다 다음과 같은 오류가 발생합니다.

오류 TS2693: '약속'은 유형을 나타낼 뿐이지만 여기서 값으로 사용되고 있습니다.

나는 코드의 다음 변형을 사용해 보았다.

Promise 컨스트럭터 사용

responsePromise = new Promise((resolve, reject) => {
                    return reject(new Error(`missing is needed data`))
                })

Promise를 사용합니다.거절하다

responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`));

버전

다음은 dev 의존관계에 있는 버전입니다.

"typescript": "^2.2.2"
"@types/aws-lambda": "0.0.9",
"@types/core-js": "^0.9.40",
"@types/node": "^7.0.12",

tsconfig.json의 내용

{
    "compileOnSave": true,
    "compilerOptions": {
        "module": "commonjs",
        // "typeRoots" : ["./typings", "./node_modules/@types"],
        "target": "es5",
        // "types" : [ "core-js" ],
        "noImplicitAny": true,
        "strictNullChecks": true,
        "allowJs": true,
        "noEmit": true,
        "alwaysStrict": true,
        "preserveConstEnums": true,
        "sourceMap": true,
        "outDir": "dist",
        "moduleResolution": "Node",
        "declaration": true,
        "lib": [
            "es6"
        ]
    },
    "include": [
        "index.ts",
        "lib/**/*.ts"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}

ts 태스크를 실행하기 위해 다음과 같은 구성으로 grunt-ts를 사용하고 있습니다.

ts: {
            app: {
                tsconfig: {
                    tsconfig: "./tsconfig.json",
                    ignoreSettings: true
                }
            },
...

'ts' '약속'은 유형만을 의미할 뿐, 여기서는 가치로 사용되고 있지만 운이 따르지 않습니다.

도 같은 .aws-sdk그리고 그걸 이용해서 해결했어요"target": "es2015"은 나의 ★★★★★★★★★★★★★★★★★★★입니다tsconfig.jsonfilename을 클릭합니다.

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": false,
        "noImplicitAny": false,
        "module": "commonjs",
        "target": "es2015"
    },
    "include": [
        "src/**/*"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}

오늘 같은 오류가 발생하여 다음과 같은 방법으로 해결:

npm i --save-dev  @types/es6-promise

업데이트:

추가:

import {Promise} from 'es6-promise'

tsconfig.json 파일에 아래 코드를 추가하여 해결했습니다.

"lib": [
    "ES5",
    "ES2015",
    "DOM",
    "ScriptHost"]

compiler Options에서 대상을 변경하여 해결합니다.

{
"compilerOptions": {
    "module": "es2015",
    "target": "es2015",
    "lib": [
        "es2016",
        "dom"
    ],
    "moduleResolution": "node",
    "noImplicitAny": false,
    "sourceMap": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "outDir": "./public/js/app"
},
"exclude": [
    "node_modules",
    "public/js",
    "assets/app/polyfills.ts"
],
"angularCompilerOptions": {
    "skipMetadataEmit": true
}
}

여기 제 팁이 있습니다.vscoode 1.21.1(MAC 상)에서 테스트 완료

아래 구성을 tsconfig.json에 추가합니다.

"lib": [
"es2016",
"dom"
]

컴파일러 옵션

IDE 를 재기동합니다(이 작업은 필수입니다.D )

는 이 같은 에서 i서같 i i i i i 。index.ts다음과 같은 속성을 조합하여 사용합니다.

tsconfig.json의 경우:

  "compilerOptions": {
    "target": "ES6"

그리고 패키지로.json:

  "main": "index.ts",
  "scripts": {
    "start": "tsc -p tsconfig.json && node index.js"

이 오류가 발생했지만 이 명령을 사용하여 해결했습니다.ts 파일명은 promites-fs.ts 입니다.

tsc promises-fs.ts --target es6 && node promises-fs.js

오류는 사라졌습니다.

typeScript 3.0.1에 다음 lib 배열을 추가할 때까지 같은 문제가 있었습니다.

tsconfig.json

{
  "compilerOptions": {
    "outDir": "lib",
    "module": "commonjs",
    "allowJs": false,
    "declaration": true,
    "target": "es5",
    "lib": ["dom", "es2015", "es5", "es6"],
    "rootDir": "src"
  },
  "include": ["./**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

에러가 발생하는 파일에 아래 행을 추가합니다.이것으로 문제가 해결됩니다.

declare var Promise: any;

추신: 이것은 결코 최적의 솔루션이 아닙니다.

마침내 TSC는 오류 없이 작동하기 시작했습니다.하지만 여러 가지 변화가 있습니다.Sandro Keil, Pointy & unional 덕분에

  • dt~aws-lambda 제거됨
  • noEmit, declaration 등의 옵션이 삭제되었습니다.
  • Grunt 파일을 수정하고 ignoreSettings를 삭제했습니다.

tsconfig.json

{
    "compileOnSave": true,
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "strictNullChecks": true,
        "alwaysStrict": true,
        "preserveConstEnums": true,
        "sourceMap": false,
        "moduleResolution": "Node",
        "lib": [
            "dom",
            "es2015",
            "es5",
            "es6"
        ]
    },
    "include": [
        "*",
        "src/**/*"
    ],
    "exclude": [
        "./node_modules"
    ]
}

Gruntfile.js

ts: {
            app: {
                tsconfig: {
                    tsconfig: "./tsconfig.json"
                }
            },
...

나 타이프스크립트에서도 같은 .aws-sdkes6.

의 완전한 ★★★★★★★★★★★★★★★★★★★.tsconfig.json 삭제:

{
        compilerOptions: {
                outDir: ./dist/,
                sourceMap: true,
                noImplicitAny: true,
                module: commonjs,
                target: es6,
                jsx: react,
                allowJs: true
        },
        include: [
                ./src/**/*
    ]
}

도 있지만 더해서 요.esnext 나 my my mylib

{
  "compilerOptions": {
    "lib": [
        "esnext"
    ],
    "target": "es5",
  }
}

FIX는 컴파일러가 제안하는 바와 같이 다음과 같습니다.

.libes2015년

tsc 명령어를 파일명으로 실행하고 있는 경우는, 다음의 점에 주의해 주세요.

tsc testfile.ts

tsconfig.json 컴파일러 컨피규레이션파일은 무시됩니다.tsconfig.json을 편집하여 파일세트를 포함하지 않는 한 tsc 명령어 중 하나를 단독으로 실행합니다.이 경우 디렉토리 내의 모든 .ts 파일이 컴파일 됩니다.

'파일 속성 사용'을 참조하십시오...https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

버전의 core-js를 했을 입니다.npm i @types/es6-promise --save-dev문제를 없앴다.'rxjs' sdk 'rxjs' 입니다.발생한 오류는 다음과 같습니다.

`node_modules/rxjs/Observable.d.ts(59,60): error TS2693: Promise only refers to a type, but is being used as a value here.`

를 사용하고 있는 경우는,프로젝트입력된 리포지토리에서 이 최근 문제가 발생할 수 있습니다.

적절한 해결 방법은 정의 파일의 업데이트 빌드를 기다리거나 TS 코드를 리팩터링하는 것 외에 Visual Studio가 최신/최신 버전을 선택하도록 하는 것이 아니라 core-j 입력에 대해 명시적인 버전+빌드를 지정하는 것입니다.이 문제의 영향을 받지 않는 것 같은 것을 발견했습니다(적어도 제 경우는 패키지의 다음 행을 대체할 수 있습니다).json 파일:

  "scripts": {
    "postinstall": "typings install dt~core-js --global"
  }

다음 중 하나와 함께:

  "scripts": {
    "postinstall": "typings install dt~core-js@0.9.7+20161130133742 --global"
  }

이것으로 내 문제는 영원히 해결되었다.단, 이 문제가 출시되는 즉시 명시적 버전+빌드 참조를 삭제할 것을 강력히 권장합니다.

이 문제에 대한 자세한 내용은 제가 이 주제에 대해 쓴 블로그 게시물을 읽어보시기 바랍니다.

같은 에러가 발생해, 다음의 설정으로 수정했습니다.

파일: tsconfig.json

{
  "compilerOptions": {
    "target": "es2015",                      
    "module": "commonjs",                    
    "strict": true,                          
    "esModuleInterop": true                  
  }
}

저도 같은 문제가 있어서 두 번째 문제에서 벗어날 수 있었습니다.

콘솔에 다음 내용을 기록합니다.

npm i --save bluebird
npm i --save-dev @types/bluebird @types/core-js@0.9.36

카피 페이스트에 문제가 있는 파일에는, 다음과 같이 입력합니다.

import * as Promise from 'bluebird';

tsconfig.json 파일에서 대상을 "ES2017"로 변경하기만 하면 됩니다.

이것은 나의 tsconfig.json 파일입니다.

{
"compilerOptions": {
/* Basic Options */
    "target": "ES2017",   /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */
    "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "declaration": true,  /* Generates corresponding '.d.ts' file. */
    "sourceMap": true,    /* Generates corresponding '.map' file. */
    "outDir": "./dist",   /* Redirect output structure to the directory. */
    "strict": true        /* Enable all strict type-checking options. */
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

npm i --save-dev @types/es6-timeouts

up 명령어 후 tsconfig.json을 체크하여 "target"이 "es6"보다 커야 합니다.아마 TSC는 아직 es5를 지원하지 않을 수 있습니다.

여기 올라온 답변들 중 나에게 맞는 답변은 하나도 없다.여기 보증되고 합리적인 솔루션이 있습니다.Promise를 사용하는 모든 코드 파일의 맨 위 근처에 배치...

declare const Promise: any;

이걸 고치려고 많은 시간을 들였잖아나는 이곳이나 다른 곳에서 어떤 해결책도 제공할 수 없었다.

그러나 나중에야 그것이 단지 문제를 해결하는 것만이 아니라는 것을 깨달았다.그러나 VSCODE를 적용하려면 다시 시작해야 합니다.

여기에는 많은 것을 할 수 있는 답변이 있습니다.그러나 그 요령은 이미 여러 답변에 언급되어 있다.따로 B/C라고 대답하는 것은 구체적으로 말하고 싶습니다.

이를 수정하기 위해 실제로 필요한 유일한 변경은 "target"을 >= "es2015"로 변경하는 것입니다.오류에 나와 있는 것처럼...다만, ide 를 재기동할 때까지, 전혀 차이가 없는 경우는, 다음과 같이 표시되지 않습니다.

그렇게

  1. "compiler Options": {"target": "es2015"
  2. IDE를 재기동합니다.
  3. 에휴.

언급URL : https://stackoverflow.com/questions/43119163/typescript-error-ts2693-promise-only-refers-to-a-type-but-is-being-used-as

반응형