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.json
filename을 클릭합니다.
{
"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-sdk
es6
.
의 완전한 ★★★★★★★★★★★★★★★★★★★.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는 컴파일러가 제안하는 바와 같이 다음과 같습니다.
.
lib
es2015년
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 를 재기동할 때까지, 전혀 차이가 없는 경우는, 다음과 같이 표시되지 않습니다.
그렇게
- "compiler Options": {"target": "es2015"
- IDE를 재기동합니다.
- 에휴.
언급URL : https://stackoverflow.com/questions/43119163/typescript-error-ts2693-promise-only-refers-to-a-type-but-is-being-used-as
'programing' 카테고리의 다른 글
2개의 마이크로 서비스 간의 통신 (0) | 2023.03.01 |
---|---|
CSS를 통한 인라인 이미지 표시 (0) | 2023.03.01 |
woocommerce 2.1.5의 도구 메뉴에서 누락된 woocommerce 페이지를 설치하는 방법 (0) | 2023.02.24 |
TypeScript 인터페이스에서 특정 문자열을 요구하는 방법 (0) | 2023.02.24 |
워드프레스의 커스텀 포스트 타입에 발췌를 추가하는 방법 (0) | 2023.02.24 |