টাইপস্ক্রিপ্ট থেকে এনপিএম মডিউলগুলি কীভাবে গ্রাস করবেন?


91

আমি টাইপ স্ক্রিপ্ট এ একটি শট দিচ্ছি। হ্যালো ওয়ার্ল্ড পর্যায়ে এটি দুর্দান্ত কাজ করে। আমি এখন একটি এনপিএম মডিউল ব্যবহার করার চেষ্টা করছি:

index.ts =

import _ = require('lodash')

console.log(_.toUpper('Hello, world !'))

এটি কাজ করে না:

  • tsc index.ts -> Cannot find module 'lodash'. (2307)
  • node-ts index.js -> Cannot find module 'lodash'. (2307)

টাইপস্ক্রিপ্ট ডকুমেন্টেশন এবং গুগলে দেখে কোনও লাভ হয়নি। অন্যান্য এস / ও প্রশ্নগুলি উত্তরহীন ( এখানে এবং এখানে ) বা সম্পর্কিত নয়।

উপাদানসমূহ:

  • প্রকার: 1.8 সর্বশেষ
  • হ্যাঁ, লড্যাশ ইনস্টল করা আছে npm i --save lodashএবং আমার ফাইল সিস্টেমে বিদ্যমান রয়েছে (পরীক্ষা করা হয়েছে)
  • আমিও করেছি typings i --save lodash
  • রূপগুলো import * as _ from 'lodash'বা const _ = require('lodash')পারেন কাজ করে না
  • আমি হিসাবে অন্যান্য উত্তর প্রস্তাব tsconfig.json অপশন tweaking চেষ্টা "moduleResolution": "node"এবং "module": "commonjs"কিছু উত্তর মধ্যে প্রস্তাবিত, এখনও কাজ করে না

টাইপসক্রিপ্টে আমরা কীভাবে এনপিএম প্যাকেজ গ্রাস করব ??


4
আপনি কি আপনার সূচকগুলিতে লড্যাশ.ডেটস-এর রেফারেন্স যুক্ত করেছেন? এটি দেখতে এটির মতো দেখতে পাওয়া উচিত: ///<reference path="../typings/lodash/lodash.d.ts"/>
গ্রানাগা

@ গ্রাঙ্গা এটি কাজ করে। আপনি কি উত্তর হিসাবে এটি যুক্ত করতে পারেন?
অফির্মো

4
খুশী এটা কাজ করে। ব্ল্যাকাস ইতিমধ্যে উত্তর যুক্ত করেছে এবং এটি আমার আরও ভাল প্রস্তাবিত কি তা নির্দিষ্ট করে। যদিও একটি নোট: কমান্ড লাইনে ইনপুট ফাইলগুলি নির্দিষ্ট করা হলে (যা আপনার ক্ষেত্রে), tsconfig.json ফাইলগুলি উপেক্ষা করা হবে। ( উত্স )
গ্রানাগা

উত্তর:


61

[সম্পাদনা] এই উত্তরের জন্য অনেক ধন্যবাদ! তবে, 2018 হিসাবে এটি পুরানো। পাঠকগণ, অন্য উত্তরগুলি দেখুন।

এনপিএম থেকে মডিউল আমদানি করার বিভিন্ন উপায় রয়েছে। তবে আপনি যদি টাইপগুলি না পান তবে tscসর্বদা অভিযোগ করবেন যে এটি আপনার প্রয়োজনীয় মডিউলটি খুঁজে পাবে না (এমনকি ট্রান্সপ্লেড জেএস আসলে কাজ করছে কিনা )।

  • আপনার যদি টাইপিং থাকে এবং এগুলি ব্যবহার না করে, টাইপগুলি আমদানি করতে tsconfig.jsonব্যবহার করুন reference:

    /// <reference path="path/to/typings/typings.d.ts" />
    
    import * as _ from 'lodash`;
    
    console.log(_.toUpper('Hello, world !'))
    
  • আপনি যদি কোনও tsconfig.jsonফাইল ব্যবহার করছেন তবে আপনার টাইপিং ফাইলটি অবশ্যই অন্তর্ভুক্ত করবেন (বা বাদ না দেওয়া, আপনার পছন্দ) নিশ্চিত importকরুন এবং আগের উদাহরণটি পছন্দ করুন।

ক্ষেত্রে যখন উপলব্ধ টাইপিং নেই। আপনার দুটি পছন্দ আছে: কোনও .d.tsফাইলে নিজের লিখুন বা লাইব্রেরির জন্য টাইপ পরীক্ষা করা উপেক্ষা করুন।

প্রকারের চেকিংটিকে পুরোপুরি উপেক্ষা করার জন্য (এটি কোনও প্রস্তাবিত উপায় নয়), লাইব্রেরিটি টাইপের পরিবর্তে আমদানি করুন any

 const _: any = require('lodash');

 console.log(_.toUpper('Hello, world !'))

tscrequireঅস্তিত্ব নেই যে অভিযোগ করবে । প্রদান করুন nodetypings, অথবা declareএটি ভুল বাতিল করতে।


4
3 টি সমাধান সহ সম্পূর্ণ উত্তর। +1
অফিরমো

সংযোজন: ts-nodeটাইপিং সূচকগুলিতে যতক্ষণ রেফারেন্স করা হয় ততক্ষণ এটি কাজ করেtsconfig.json
অফিরমো

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

4
এই উত্তরটি মারাত্মকভাবে পুরানো। নীচের আমার নতুন উত্তর দেখার stackoverflow.com/a/53786892/587407
Offirmo

50

[2018/12] নতুন, আপ টু ডেট, আমি 2016 সালে জিজ্ঞাসা করা এই প্রশ্নের উত্তর, যা এখনও পুরানো উত্তর থাকা সত্ত্বেও প্রচুর কার্যকলাপ দেখায়।

দীর্ঘ গল্প সংক্ষিপ্ত, টাইপস্ক্রিপ্ট আপনার প্যাকেজ কোড (ওরফে " টাইপ ডিক্লেয়ারেশন ফাইল " ওরফে "টাইপিংস") সম্পর্কে টাইপ তথ্য প্রয়োজন এবং সঠিকভাবে আপনাকে বলে যে আপনি অন্যথায় টাইপস্ক্রিপ্ট পুরো পয়েন্ট হারাতে হবে। এগুলি সরবরাহ করার বা সেগুলি থেকে বেরিয়ে আসার জন্য বেশ কয়েকটি সমাধান রয়েছে যা সেরা অনুশীলনের জন্য এখানে তালিকাবদ্ধ রয়েছে:


সমাধান 0 : মডিউলটি ইতিমধ্যে টাইপগুলি সরবরাহ করে। যদি এর প্যাকেজ.জসনে এর মতো একটি লাইন থাকে:

"typings": "dist/index.d.ts",

এটি ইতিমধ্যে টাইপস্ক্রিপ্ট-সক্ষম। সম্ভবত আপনি যদি এই পৃষ্ঠাটি পড়ছেন তবে কেস নয়, সুতরাং চলুন ...


সমাধান 1 থেকে ব্যবহার সম্প্রদায় অবদান থাকা typings DefinitelyTyped । "Foo" মডিউলটির জন্য এটি ব্যবহার করে দেখুন:

npm add -D @types/foo

যদি এটি কাজ করে, জ্যাকপট! আপনার কাছে এখন টাইপিং রয়েছে এবং আপনার মডিউলটি ব্যবহার করতে পারেন। যদি এনপিএম অভিযোগ করে যে এটি @ প্রকারের / foo মডিউলটি খুঁজে না পায় তবে চলুন ...


সমাধান 2 : এই মডিউলটি সম্পর্কে কাস্টম টাইপ সরবরাহ করুন। (শূন্য প্রচেষ্টা করার একটি বিকল্প সহ)

  1. আপনার প্রকল্পের মূলটিতে "টাইপিংস-কাস্টম" নামে একটি ফোল্ডার তৈরি করুন
  2. আপনার tsconfig.json এ এই ফোল্ডারের সামগ্রীটি উল্লেখ করুন:
"include": [
    "./typings-custom/**/*.ts"
]
  1. এই সঠিক নাম সহ একটি ফাইল তৈরি করুন: foo.d.ts [foo = মডিউলটির নাম] সামগ্রী সহ:
declare module 'foo'

আপনার টাইপস্ক্রিপ্ট কোডটি এখন কোনও প্রকারের তথ্যের সাথে সংকলিত হওয়া উচিত (টাইপসক্রিপ্ট "কোনও" টাইপের ফু মডিউল বিবেচনা করুন)।

আপনি নিজেই টাইপ তথ্য লেখার চেষ্টা করতে পারেন, অফিসিয়াল ডক এবং / অথবা DefinitelyType এর উদাহরণগুলিতে দেখে । যদি আপনি তা করেন তবে আপনার টাইপগুলি সরাসরি মডিউলে (সমাধান 0, মডিউল লেখক গ্রহণ করলে) বা ডেফিনিটলিটাইপযুক্ত (সমাধান 1) এর মধ্যে অবদানের কথা ভাবেন


4
@ ওফিরমো, আমরা একক ফাইলে একাধিক কাস্টম টাইপগুলিও ঘোষণা করতে পারি! সুতরাং, একাধিক ফাইলের প্রয়োজন নেই (সম্ভবত?)।
অলসাইফার

পদক্ষেপ 2. Reference the content of this folder in your tsconfig.json:নিম্নলিখিত ত্রুটিটি দেয়: Unknown compiler option 'include'.
সুমিত

4
@ সুমিত এটি সংকলক বিকল্প নয়, এটি একটি ভাইবোন হওয়া উচিতcompilerOptions
অফির্মো

22

আপনি সম্ভবত ঘোষণা ফাইলগুলি মিস করছেন ।

আরও তথ্যের জন্য ডেফিনিটলি টাইপড দেখুন ।


এটা চেষ্টা কর:

npm install --save lodash
npm install --save @types/lodash

এখন আপনি আমদানি করতে পারেন।

import _ from 'lodash';

আপনি যে মডিউলটি আমদানি করছেন তার যদি একাধিক রফতানি থাকে তবে আপনি এটি করতে পারেন:

import { Express, Router } from 'express';

আপনি যে মডিউলটি আমদানি করছেন তার " যদি কোনও ডিফল্ট রফতানি না থাকে" আপনার এইটি করা দরকার:

import * as http from 'http';

কেন আমাদের ES6 কোডের মতো * as _নয় এবং কেন ব্যবহার করতে হবে _ from 'lodash'?
জনিকিউ 10:58

পছন্দ করুন import _ from 'lodash';এই ক্ষেত্রে ব্যবহার করা আরও ভাল। আমদানির বিভিন্ন উপায় এবং আপনি সেগুলি কেন ব্যবহার করবেন তা দেখানোর জন্য আমি আমার উত্তর আপডেট করেছি।
ডেরেক সোইকে

4
* as _ প্রয়োজন হলে মডিউল কোনো ডিফল্ট রপ্তানি রয়েছে। টিএসসি সংকলক এ সম্পর্কে সতর্ক করবে।
ব্যবহারকারী 2867342

'কোনও ডিফল্ট রফতানি' দ্বারা এর অর্থ কি কোনও টাইপস্ক্রিপ্ট প্রকার সংজ্ঞায়িত করা হয়নি (অর্থাত্ একটি সরল জাভাস্ক্রিপ্ট মডিউলটি আমদানি করা)? আমি জেএস / টাইপসক্রিপ্টে নতুন আছি ....
বড় সমৃদ্ধ

4
@ বিগ্রিচ "ডিফল্ট রফতানি নয়" মানে মডিউলটির কোনও export default <...>বিবৃতি নেই। টাইপসক্রিপ্ট মডিউল ডকুমেন্টেশনের "ডিফল্ট রফতানি" বিভাগটি একবার দেখুন ।
ডেরেক সোইক

4

এটা আমার জন্য কাজ করেছে।

  1. "টাইপিংস" নামে একটি ফোল্ডার তৈরি করুন।
  2. টাইপিং ফোল্ডারে, একটি ফাইলের নাম মডিউল-name.d.ts তৈরি করুন । এতে রয়েছে:

    declare module "module-name";

  3. Tsconfig.json এ, ফোল্ডারটি দেখুন

    "typeRoots": [ "./typings", "../node_modules/@types" ]


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

পদক্ষেপ 3 In tsconfig.json, refer to the folderUnknown compiler option 'typesRoots'.
সুমিত

4
@ সুমিত আমার ক্ষেত্রে, "টাইপস রুটস" এর ভিতরে "সংকলন অপশন" রয়েছে
কুইন এনজিও

4
এটি টাইপ রুটগুলি টাইপ রুট নয়, এবং সংকলকগুলির অভ্যন্তরে থাকা উচিত
সিএম

0

আমি এই ত্রুটিটি পেয়েছি এবং উত্তরগুলির কোনওটির জন্যই আমার পক্ষে কাজ করা হয়নি তবে যখন আপনি টাইপ স্ক্রিপ্টে নোড মডিউল নিয়ে কাজ করতে চান তখন এগুলি ইনস্টল করুন i

$npm install @types/<module_name>

উদাহরণ স্বরূপ

npm install @types/cheerio

কথার পরিবর্তে

npm install cheerio
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.