টাইপসক্রিপ্ট: ত্রুটি TS2693: 'প্রতিশ্রুতি' কেবল একটি প্রকারকে বোঝায়, তবে এখানে মান হিসাবে ব্যবহৃত হচ্ছে


144

আমি আমার এডাব্লুএস ল্যাম্বদার জন্য টাইপস্ক্রিপ্ট ব্যবহার করার চেষ্টা করছি এবং আমি যখনই প্রতিশ্রুতি ব্যবহার করি তখন নীচের ত্রুটিগুলি পাচ্ছি।

ত্রুটি TS2693: 'প্রতিশ্রুতি' কেবল একটি প্রকারকে বোঝায়, তবে এখানে মান হিসাবে ব্যবহৃত হচ্ছে।

আমি কোডটিতে নিম্নলিখিত পরিবর্তনগুলি ব্যবহার করার চেষ্টা করেছি

প্রতিশ্রুতিবদ্ধ নির্মাণকারী ব্যবহার করে

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

Promise.reject ব্যবহার করে

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

সংস্করণ

আমার দেব নির্ভরতাগুলির সংস্করণগুলি নিম্নলিখিত:

"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: {
            app: {
                tsconfig: {
                    tsconfig: "./tsconfig.json",
                    ignoreSettings: true
                }
            },
...

আমি যে সমাধান পেয়েছি তার সাথে চেষ্টা করেছি: [টিএসএস] 'প্রতিশ্রুতি' কেবল একটি প্রকারকে বোঝায়, তবে এখানে মান হিসাবে ব্যবহৃত হচ্ছে তবে ভাগ্য নেই।


1
প্রতিশ্রুতিবদ্ধ কনস্ট্রাক্টরের কাছে পাঠানো কলব্যাক ফাংশনের জন্য কোনও রিটার্ন মান প্রয়োজন হয় না। শুধু মুক্তি পেতে return
পয়েন্টি

আপনি ভালো মানে কি? responsePromise = new Promise((resolve, reject) => { reject(new Error("missing is needed data"))})আমি এটা চেষ্টা করেছি. তবে সমস্যাটি নিয়ে মাথা ঘামেনি।
কল্যাণভোগোপাল

হ্যাঁ. জাভাস্ক্রিপ্ট আপনার কোনও মূল্য ফিরিয়ে দেয় কি না সেদিকে লক্ষ্য রাখে না, তবে এটি এতে মনোযোগ দেবে না। টাইপস্ক্রিপ্ট অবশ্য যত্ন করে।
পয়েন্টি

বুঝেছি. তবে টিএসসি কেন প্রোমস.প্রসারণ বা প্রতিশ্রুতি.রেজকের কোনও গন্ধ সংকলন করতে ব্যর্থ হয়?
কল্যাণভোগোপাল

আমি জানি না। ঠিক কীভাবে responsePromiseঘোষিত হয়?
পয়েন্টি

উত্তর:


122

আমার সাথেও একই সমস্যা ছিল aws-sdkএবং আমি এটি ব্যবহার করে সমাধান করেছি "target": "es2015"। এটি আমার tsconfig.jsonফাইল।

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

5
ধন্যবাদ সান্দ্রো একই চেষ্টা করেছেন কিন্তু আমার ক্ষেত্রে সহায়তা করেননি।
কল্যাণভোগোপাল

হতে পারে @types/aws-lambdaপুরানো। আমাজন অফিসিয়াল এসডিকে দিয়ে টাইপস্ক্রিপ্ট প্রকারগুলি পাঠায় । ডিফিনিটলি টাইপ করার দরকার নেই।
স্যান্ড্রো কেইল

এটি আমার জন্য প্রশ্নের সংজ্ঞায়িত ত্রুটিটি সমাধান করে এবং আমি কেবল rxjs আমদানি করছিলাম, এমনকি প্রমিসও ব্যবহার করছিলাম না। অনেক ধন্যবাদ!
মোজুরবি

3
যারা এস ৫ টি টার্গেট করে শুরু করেছিলেন তাদের জন্য এটি সম্ভবত সেরা উত্তর। এস 5 থেকে এস ২০১৫ এ স্যুইচ করা আমার জন্য এটিও ঠিক করে দিয়েছে। তবে সতর্কতা অবলম্বন করুন, আপনি সম্ভবত আপনার আইডিই / সম্পাদকটি বন্ধ না করে এবং পুনরায় চালু না করা পর্যন্ত ত্রুটিটি দেখতে পাবেন। টিএসসি (বা এটির ঘড়ির মোড) সম্পর্কে কিছু এটি উপস্থিত করছিল যে এটি সত্যিকার অর্থেই এটি ঠিক করছিল না, তবে vscode পুনরায় আরম্ভ করতে হবে।

7
আপডেট / সংযোজন: যদি আপনি এখনও এস 5 কে লক্ষ্য করতে চান (আরও ভাল ব্রাউজার সমর্থনের জন্য, এবং গুরুত্বপূর্ণ) যা আপনার সংকলক বিকল্পগুলিতে সরবরাহ করে ততক্ষণ কাজ করে না: "lib": ["es2015", "ডোম", " স্ক্রিপ্টহস্ট "], আমার জন্য কৌতুকটি বুঝতে পেরেছিল যে আমাকে ভিএসকোড সম্পাদক পুনরায় চালু করতে হবে, এটি পরিবর্তন করার পরে এটি কাজ শুরু করার আগে।

83

আজ একই ত্রুটি মোকাবেলা করুন এবং এটি দিয়ে সমাধান করুন:

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

হালনাগাদ:

যোগ করুন:

import {Promise} from 'es6-promise'

3
+ এবং ভিএস কোড পুনরায় চালু করা প্রকারগুলি ইনস্টল করার পরেও খুব সহায়তা করে
কিংবদন্তি

4
ত্রুটি: এটি এই লাইনটি ব্যবহার করে কাজ করে import {Promise} from 'es6-promise';
লুইক কোইন

'এসি-প্রতিশ্রুতি' থেকে "আমদানি {প্রতিশ্রুতি add" কোথায় যুক্ত করবেন?
বারাক্সাস

আমি এই সমাধানটি অতীতে ব্যবহার করেছি, তবে এই মুহূর্তে এটি আমার পক্ষে কাজ করছে না। import { Promise } from '../node_modules/es6-promise/es6-promise';তবে, মনে হচ্ছে ঠিকঠাক কাজ করছে। কেন টিএস ইনস্টলড টাইপগুলি সন্ধান করতে অক্ষম হবে?
snarf

35

আমি tsconfig.json ফাইলের নীচে কোড যুক্ত করে এটি সমাধান করেছি।

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

3
এটি আমার পক্ষে কাজ করেছে তবে নোট করুন যে "lib" অ্যারেটি tsconfig.json ফাইলের "কম্পাইলারঅ্যাপশন" অবজেক্টের ভিতরে থাকা দরকার।
বিলিআরাইক্রাস

5
টাইপস্ক্রিপ্ট ২.৪.১ ব্যবহার করে আমাকে স্ট্রিং অ্যারেতে সমস্ত অক্ষর ছোট করে রাখতে হয়েছিল। তারপর এটি কাজ করে। অনেক ধন্যবাদ.
JDTLH9

18

সংকলকগুলিতে লক্ষ্য পরিবর্তন করে সমাধান করা ।

{
"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
}
}

11

এই আমার টিপ। Vscode 1.21.1 (MAC তে) দিয়ে পরীক্ষিত

Tsconfig.json এ কনফিগারেশনের নিচে রাখুন

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

মধ্যে compilerOptions

পুনরায় আরম্ভ করুন আইডিই (এই ক্রিয়াটি প্রয়োজনীয়: ডি)


3
এটি এখানে উত্তরের
একাধিকটিতে

7

আমার এই ত্রুটি ছিল তবে আমি এই কমান্ডটি ব্যবহার করে এটি সমাধান করেছি, আমার টিএস ফাইলের নামটি প্রতিশ্রুতি- fs.ts:

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

এবং ত্রুটি চলে গেছে


5

ত্রুটি নিক্ষেপ করা হচ্ছে যেখানে ফাইলের নিচে লাইন যুক্ত করুন। এই সমস্যাটি সমাধান করা উচিত

declare var Promise: any;

PS: এটি অবশ্যই সর্বোত্তম সমাধান নয়


18
এটি কেবলমাত্র "প্রতিশ্রুতি" জন্য টাইপ চেকটি সরিয়ে ফেলার পরিবর্তে এটি ঠিক করে দিচ্ছে যাতে টাইপস্ক্রিপ্ট সঠিক প্রকারটি খুঁজে পায়।
edibleEnergy

1
উদাহরণস্বরূপ এই এক্সপ্লোরার 11 ইন্টারনেট এক্সপ্লোরার এর সাথে কাজ করে না। প্রতিশ্রুতি ব্যবহার করার চেষ্টা করার সময় আমি একটি 'অপরিবর্তিত' ত্রুটি ছুড়ে ফেলি। যাইহোক ক্রোমের সাহায্যে তার কাজটি পুরোপুরি কার্যকর হয়।
কলিন ভ্লাসিন

1
এটা একটা কাপুরুষোচিত উপায়। TSআপনি যদি এই জাতীয় কিছু করতে যাচ্ছেন তবে কেন এটি ব্যবহার করুন । মানে তখন কী লাভ ?!
হাফিজ তেমুরি

1
আমি সম্মত হই যে এটি অনুকূল নয় তবে এটি বলা অন্যায্য যে এই ঘোষণার অর্থ টিএস ব্যবহারের কোনও মানে নেই। এক প্রকারে টাইপচেক ফেলে রাখা বাকী টাইপচেকগুলি অকেজো করে না। এবং আমার জন্য, এটি একমাত্র সমাধান যা কাজ করেছিল।
থরকিল ভেরজ

নোংরা হ্যাক হতে পারে তবে আমি এই পৃষ্ঠায় অন্যান্য সমস্ত সমাধান চেষ্টা করার পরে এটিই আমার পক্ষে কাজ করেছে। কমপক্ষে আমার কোডটি সংকলিত এবং কাজ পেয়েছি। আমি যে কাজ নোংরা হ্যাক খনন।
জেরেমি থিল

4

অবশেষে টিএসএস কোনও ত্রুটি ছাড়াই কাজ শুরু করে। তবে একাধিক পরিবর্তন। সান্দ্রো কেইল , পয়েন্টিইউনিয়নকে ধন্যবাদ

  • মুছে ফেলা হয়েছে t অউস-ল্যাম্বদা
  • NoEmit, ঘোষণা হিসাবে অপসারণ অপশন
  • গ্রান্টফাইলে সংশোধন করা হয়েছে এবং উপেক্ষা করা সেটিংস সরানো হয়েছে

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"
                }
            },
...

4

টাইপস্ক্রিপ্ট এবং একই সমস্যা ছিল aws-sdk। সমাধান ছিল লক্ষ্য পরিবর্তন করতে es6

আমার সম্পূর্ণ tsconfig.jsonফাইল:

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

3
হ্যাঁ এসটিটি টার্গেটিংয়ের এটি ঠিক করা উচিত তবে আপনার ব্রাউজারের সামঞ্জস্য কম। বেশিরভাগ অ্যাপ্লিকেশনগুলি আজও এস 5-কে টার্গেট করছে, কারণ অনেক ব্রাউজার এখনও এস 6 এ নেই (2017 হিসাবে)

@ user2080225 যদিও এটি সত্য, মূল প্রশ্নটিতে ব্রাউজারের সামঞ্জস্যতা সম্পর্কে কোনও বক্তব্য দেওয়া হয়নি বলে এটি আমার উত্তরটিকে কম সঠিক করে না। সুতরাং এই সমাধানটি এখনও অন্যদের যেমন এটি আমাকে সহায়তা করেছিল তেমন সহায়তা করতে পারে।
ফ্যানাস ডু টোইট

3

আমি টাইপস্ক্রিপ্ট 3.0.1 এ নিম্নলিখিত লাইব অ্যারে যোগ না করা পর্যন্ত আমার একই সমস্যা ছিল

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"]
}

2

ঠিক আছে, এটি পাল্টা-স্বজ্ঞাত হতে পারে তবে আমি esnextআমার এটিকে যোগ করেছি lib

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

সংকলক দ্বারা প্রস্তাবিত FIX হল

libসংকলক বিকল্পটি es2015 বা তারপরে পরিবর্তন করে দেখুন ।


1

কোর-জেএস আমার পক্ষে কাজ করে নি কারণ এটি অন্যান্য সমস্যার কারণ হয়েছিল, তবে কেবল npm i @types/es6-promise --save-devসমস্যাগুলি থেকে মুক্তি পাওয়ার জন্য সর্বশেষতম সংস্করণ ইনস্টল করা । আমার জন্য সমস্যাগুলি একটি এসডিকে সংকলন থেকে শুরু হয়েছিল যা 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.`

1

আপনি যদি আপনার প্রকল্পে ডেফিনিটলি টাইপযুক্ত ভান্ডার ব্যবহার করেন তবে আপনি সম্ভবত এই সাম্প্রতিক সমস্যার সম্মুখীন হচ্ছেন

আপনি যে শালীন কাজটি ব্যবহার করতে পারেন (সংজ্ঞা ফাইলের আপডেট বিল্ডের জন্য অপেক্ষা করা বা আপনার টিএস কোডটি রিফ্যাক্ট করা ব্যতীত) হ'ল ভিজুয়াল স্টুডিওর সর্বশেষ / অতি সাম্প্রতিক একটি বেছে নেওয়ার পরিবর্তে মূল-জেএস টাইপিংয়ের জন্য একটি স্পষ্ট সংস্করণ + বিল্ড নির্দিষ্ট করা । আমি একটি পেয়েছি যা এই সমস্যার দ্বারা অকার্যকর বলে মনে হচ্ছে (কমপক্ষে আমার ক্ষেত্রে), আপনি এটি আপনার প্যাকেজ থেকে নীচের লাইনটি প্রতিস্থাপন করে ব্যবহার করতে পারেন j jso n ফাইল:

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

নিম্নলিখিত এক সঙ্গে:

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

এটি আমার সমস্যাটি ভালোর জন্য স্থির করেছে। তবে ইস্যুটি প্রকাশের সাথে সাথে সুস্পষ্ট সংস্করণ + বিল্ড রেফারেন্সটি সরিয়ে ফেলার জন্য অত্যন্ত পরামর্শ দেওয়া হচ্ছে।

এই সমস্যা সম্পর্কিত আরও তথ্যের জন্য, আপনি এই ব্লগ পোস্টটি পড়তে পারেন যা আমি প্রসঙ্গে লিখেছি।


0

আমারও একই সমস্যা ছিল এবং এটি আমাকে দ্বিতীয় থেকে সমস্যা থেকে বাঁচায়:

কনসোল এ লিখুন:

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

যে ফাইলটিতে সমস্যা রয়েছে তা অনুলিপি করুন:

import * as Promise from 'bluebird';

0

কেবলমাত্র 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"
  ]
}

0

এনপিএম আমি - সেভ-দেব @ প্রকারের / এস 6-প্রতিশ্রুতি

আপ কমান্ডের পরে, আপনি tsconfig.json আরও ভাল পরীক্ষা করে দেখতে পারেন যে "এসএইচ" এর চেয়ে "টার্গেট" অবশ্যই দুর্দান্ত। সম্ভবত tsc এখনও এস 5 সমর্থন করে না।


0

এখানে আপ-ভোট দেওয়া উত্তরগুলির কোনওই আমার পক্ষে কাজ করে না। এখানে একটি গ্যারান্টিযুক্ত এবং যুক্তিসঙ্গত সমাধান। প্রতিশ্রুতি ব্যবহার করে যে কোনও কোড ফাইলের শীর্ষে এটি রাখুন ...

declare const Promise: any;

2
না, এটি করবেন না ... বা আপনি যদি এরকম কিছু করতে যাচ্ছেন তবে টাইপস্ক্রিপ্টটি ব্যবহার করবেন না
হাফিজ তেমুরি

0

এটি ঠিক করার চেষ্টা করে অনেক সময় ব্যয় করা। এখানে বা অন্য কোথাও কোনও সমাধান দেওয়ার জন্য আমার ভাগ্য ছিল না।

তবে পরে বুঝতে পেরেছি যে এটি কেবল সমস্যাটি সমাধান করার মতো নয়। তবে এটি কার্যকর হওয়ার জন্য আপনাকে ভিসকোডিটি পুনরায় চালু করতে হবে।


0

আমার একই ত্রুটি ছিল এবং আমি এই কনফিগারেশনটি দিয়ে এটি ঠিক করেছি:

ফাইল: tsconfig.json

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

0

দয়া করে সচেতন হন যে আপনি যদি কোনও ফাইলের নাম দিয়ে টিএসসি কমান্ড চালাচ্ছেন যেমন:

tsc testfile.ts

তারপরে tsconfig.json সংকলক কনফিগারেশন ফাইলটিকে উপেক্ষা করা হবে। সমাধানটি হয় নিজেই tsc কমান্ড চালানো, সেই ক্ষেত্রে ডিরেক্টরিতে সমস্ত .ts ফাইল সংকলিত হবে, যদি না আপনি ফাইলগুলির একটি সেট অন্তর্ভুক্ত করতে tsconfig.json সম্পাদনা করেন।

'ফাইলের সম্পত্তি ব্যবহার করে' দেখুন ... https://www.typescriptlang.org/docs/handbook/tsconfig-json.html



0

আমি এই একই ত্রুটি থেকে মুক্তি পেয়েছি index.tsএই সংযুক্ত বৈশিষ্ট্যগুলির সাথে :

Tsconfig.json এ:

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

প্যাকেজ.জসনে:

  "main": "index.ts",
  "scripts": {
    "start": "tsc -p tsconfig.json && node index.js"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.