কীভাবে moment.js টাইপ স্ক্রিপ্ট দিয়ে আমদানি করা যায়?


96

আমি টাইপস্ক্রিপ্ট শিখতে চেষ্টা করছি। যদিও আমি এটি প্রাসঙ্গিক বলে মনে করি না, আমি এই ডেমোটির জন্য ভিএসকোড ব্যবহার করছি।

আমার package.jsonকাছে এই টুকরোগুলি রয়েছে:

{
  "devDependencies": {
    "gulp": "^3.9.1",
    "jspm": "^0.16.33",
    "typescript": "^1.8.10"
  },
  "jspm": {
    "moment": "npm:moment@^2.12.0"
  }
}

তারপরে আমার কাছে টাইপস্ক্রিপ্ট ক্লাসটি রয়েছে main.js:

import moment from 'moment';
export class Main {
}

আমার gulpfile.jsচেহারাটি এরকম:

var gulp = require('gulp');
var typescript = require('gulp-tsb');
var compilerOptions = {
                        "rootDir": "src/",
                        "sourceMap": true,
                        "target": "es5",
                        "module": "amd",
                        "declaration": false,
                        "noImplicitAny": false,
                        "noResolve": true,
                        "removeComments": true,
                        "noLib": false,
                        "emitDecoratorMetadata": true,
                        "experimentalDecorators": true
                      };
var typescriptCompiler = typescript.create(compilerOptions);
gulp.task('build', function() {
  return gulp.src('/src')
    .pipe(typescriptCompiler())
    .pipe(gulp.dest('/dest'));
});

আমি যখন গল্প বিল্ড চালাই, আমি বার্তাটি পাই: "../main.ts(1,25): Cannot file module 'moment'."

আমি যদি ব্যবহার করি import moment = require('moment');তবে jspm কাজ করবে এবং আমি অ্যাপ্লিকেশনটি চালানোর সময় মডিউলটি আনব, তবে আমি এখনও বিল্ড ত্রুটিটি পাচ্ছি। আমি চেষ্টাও করেছি:

npm install typings -g
typings install moment --ambient --save

সমস্যাটি আরও ভাল করার পরিবর্তে এটি আরও খারাপ হয়েছে। এখন আমি নিম্নলিখিতটির পাশাপাশি উপরের ত্রুটিটি পেয়েছি:"../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."

আমি যদি টাইপিংয়ের মাধ্যমে সরবরাহ করা ফাইলে যাই এবং ফাইলটির নীচে যুক্ত করি:

declare module "moment" { export = moment; }

আমি যেতে দ্বিতীয় ত্রুটি পেতে পারি, তবে আমার main.tsফাইলে কাজ করার জন্য মুহূর্ত পেতে আমার এখনও প্রয়োজনীয় বিবৃতি প্রয়োজন এবং এখনও প্রথম বিল্ড ত্রুটিটি পাচ্ছি।

.d.tsমুহুর্তের জন্য আমার নিজের ফাইলটি তৈরি করা দরকার বা আমি অনুপস্থিত কিছু সেটআপ টুকরা রয়েছে?


4
যে কেউ এখন import moment, { Moment } from 'moment';const x = moment();const x: Moment = moment();
এটিতে

এর সমাধানগুলির কোনওটিই
chrismarx

উত্তর:


124

হালনাগাদ

স্পষ্টতই, মুহুর্তটি এখন নিজস্ব ধরণের সংজ্ঞা দেয় ( শিববধ অনুসারে কমপক্ষে ২.১৪.১ থেকে উপরের দিকে), সুতরাং আপনার প্রয়োজন typingsবা মোটেই প্রয়োজন নেই @types

import * as moment from 'moment' এনপিএম প্যাকেজ সহ প্রদত্ত প্রকার সংজ্ঞাগুলি লোড করা উচিত।

এটি অবশ্য বলা হয়েছে, যেমনটি মুহুর্তে / টানা / 3319 # ইস্যু-কমেন্ট -২3৩75২২6565৫ মুহূর্তে দলে মনে হয় এই সংজ্ঞাগুলি বজায় রাখার ক্ষেত্রে কিছু সমস্যা রয়েছে (তারা এখনও তাদের রক্ষণাবেক্ষণকারীদের অনুসন্ধান করছে)


পতাকা momentছাড়াই আপনার টাইপিং ইনস্টল করতে হবে --ambient

তারপরে এটি ব্যবহার করে অন্তর্ভুক্ত করুন import * as moment from 'moment'


কাজ করেছে। আপনি --ambientপতাকা ব্যবহার করে এবং না পার্থক্য ব্যাখ্যা করতে পারেন ? পরিবেষ্টনের পতাকা ব্যবহার করে আমি সংখ্যাগুলি পেয়েছি। এছাড়াও, তাদের প্রধান পৃষ্ঠা npmjs.com/package/typings পরিবেষ্টনের পতাকা ব্যবহার করে উদাহরণ দেয়। আমি জানি না কখন আমি একে অপরের উপর দিয়ে / ব্যবহার করতে চাই। ধন্যবাদ!
পিনেরি ডেভেলপমেন্ট

4
সত্যি কথা বলতে পারি না, পারি না। সাধারণত আপনি / --ambientথেকে সমস্ত টাইপস্ক্রিপ্ট সংজ্ঞাগুলির জন্য পতাকা ব্যবহার করেন তবে সংজ্ঞায় কিছু অদ্ভুত গঠন রয়েছে এবং ফাইলগুলি সঠিকভাবে ডাউনলোড হয় না। আপনি যদি সংজ্ঞা ফাইলটি moment.d.ts দেখুন তবে এটিতে কেবল নোড সংস্করণে একটি উল্লেখ রয়েছে, যা ডাউনলোডে সমাধান করা হয়নি (কোনও সমস্যা খোলার পক্ষে উপযুক্ত হতে পারে)। typingsDefinitelyTypedmoment
সহায়তাকারীরা

স্পষ্টতই এই ইস্যুটির সাথে ইতিমধ্যে একটি সম্পর্কিত রয়েছে: github.com/DefinitelyTypeed/DefinitelyTypeed/issues/8388
peinearyde

4
আমি এটি 'মুহুর্ত / মুহূর্ত' খ / সি থেকে মুহুর্ত হিসাবে আমদানি ব্যবহার করে কাজ করতে পেলাম এটি নোড-মডিউল ফোল্ডারে সাবফোল্ডার হিসাবে ইনস্টল করা হয়েছিল।
ব্যবহারকারী 441058

4
আমি একটি ওয়েবপ্যাক এবং মুহূর্তের ২.১ 2..১ সংস্করণে আছি তবে এখনও এটি কাজ করতে পারে না। আমি চেষ্টা করেছি: 'মুহূর্ত' থেকে মুহুর্ত হিসাবে আমদানি করুন; এবং 'মুহূর্ত / মুহূর্ত' থেকে মুহুর্ত হিসাবে আমদানি করুন; এবং কাজ না!
মোহি এল্ডিন

59

আপনার মুহুর্তটি () ফাংশনটি এবং মুহুর্তটি আলাদা আলাদাভাবে টিএসে আমদানি করতে হবে ।

আমি এখানে টাইপস্ক্রিপ্ট ডক্সে একটি নোট পেয়েছি ।

/ * ~ নোট করুন যে ES6 মডিউলগুলি সরাসরি কলযোগ্য ফাংশন রফতানি করতে পারে না
* * এই ফাইলটি কমনজেএস-স্টাইল ব্যবহার করে আমদানি করা উচিত:
* ~ আমদানি x = প্রয়োজন ('কিছু লিবারি');

সুতরাং টাইপ স্ক্রিপ্টে মুহুর্তের জেএস আমদানির কোডটি আসলে এর মতো দেখায়:

import { Moment } from 'moment'
....
let moment = require('moment');
...
interface SomeTime {
  aMoment: Moment,
}
...
fn() {
  ...
  someTime.aMoment = moment(...);
  ...
}

4
ভাল উত্তর যেহেতু এটি টাইপ এবং ফাংশনের মধ্যে পার্থক্য দেখায়। ধন্যবাদ!
জেলি ডেন বার্গার

নামটি 'প্রয়োজনীয়' সন্ধান করতে পারে না
কোডেড কনটেইনার

4
এখন এটি টাইপগুলির জন্য import * as moment from 'moment';এবং তারপরে ব্যবহার করা যেতে পারে moment.Moment
উল্লিখিত

আমার জন্য যা কাজ করেছিল তা হ'ল: আমদানির মুহুর্ত = প্রয়োজনীয় ('মুহূর্ত');
টেল্মো পাইমেটেন মোটা

প্রকৃতপক্ষে আপনি moment.Momentসরাসরি নেমস্পেস থেকে ইন্টারফেসও ব্যবহার করতে পারেনmoment
হাফওয়েবদেভ

20

কখন এটি পরিবর্তন হয়েছিল তা নিশ্চিত নয়, তবে টাইপস্ক্রিপ্টের সর্বশেষতম সংস্করণ সহ আপনার কেবল ব্যবহার করা দরকার import moment from 'moment';এবং অন্য সমস্ত কিছুই স্বাভাবিক হিসাবে কাজ করা উচিত।

হালনাগাদ:

দেখে মনে হচ্ছে সাম্প্রতিক মুহূর্তে তাদের আমদানি স্থির হয়েছে। কমপক্ষে 2.24.0আপনি ব্যবহার করতে চাইবেনimport * as moment from 'moment';


4
import * as moment from 'moment'টাইপস্ক্রিপ্ট দিয়ে কাজ করবে না তবে import moment from 'moment'করে।
স্টুয়ার্ট ম্যাকিন্টায়ার

এটি কাজ করছে তবে আমি জিএমটি 0 এর সময় পাচ্ছি, তবে আমার স্থানীয় সময় প্রয়োজন যা কাজ করছে না আমি মুহুর্তের সাথে চেষ্টাও করছি ()। Utc ()। ফর্ম্যাট () তবে এটি একই ফলাফল পুনরুদ্ধার করছে।
kbhaskar

@kbhaskar তাদের আমদানি স্থির করেছেন মুহুর্তের সর্বশেষতম সংস্করণ হিসাবে। আপডেট হওয়া উত্তর দেখুন
এনএসজোনাস

4
আমার মনে হয় এটি বেশ সুন্দর। আমার কেবলমাত্র অতিরিক্ত পদক্ষেপটিই আমার কনফিগারেশনে esModuleInteropসেট করা ছিল trueযা আমি এই উত্তরটি পেয়েছি । ধন্যবাদ
মার্ক বীরবেক

14

টাইপিংয়ের মাধ্যমে

মোমেন্ট.জেএস এখন v2.14.1 এ টাইপস্ক্রিপ্ট সমর্থন করে।

দেখুন: https://github.com/moment/moment/pull/3280


সরাসরি

সর্বোত্তম উত্তর হতে পারে না, তবে এটি হ'ল বর্বরোচিত উপায় এবং এটি আমার পক্ষে কাজ করে।

  1. কেবল আসল moment.jsফাইলটি ডাউনলোড করুন এবং এটি আপনার প্রকল্পে অন্তর্ভুক্ত করুন।
  2. উদাহরণস্বরূপ, আমার প্রকল্পটি এর মতো দেখাচ্ছে:

$ tree . ├── main.js ├── main.js.map ├── main.ts └── moment.js

  1. এবং এখানে একটি নমুনা উত্স কোড:

`` `

import * as moment from 'moment';

class HelloWorld {
    public hello(input:string):string {
        if (input === '') {
            return "Hello, World!";
        }
        else {
            return "Hello, " + input + "!";
        }
    }
}

let h = new HelloWorld();
console.log(moment().format('YYYY-MM-DD HH:mm:ss'));
  1. শুধু nodeচালানোর জন্য ব্যবহার করুন main.js

হ্যাঁ আমি নিশ্চিত করলাম এটি অশান্ত উত্তর। কবজির মতো কাজ করেছেন।
ক্যাপি

আমি যখন এনপিএম আই টাইপ / মুহুর্তে এটি করার চেষ্টা করি, তখন আমি একটি ত্রুটি পেয়েছি: টাইপস্ক্রিপ্ট ত্রুটি: src \ app.ts (1,1): ত্রুটি টিএস 7038: একটি নেমস্পেস-শৈলী আমদানি কল বা নির্মাণ করা যায় না, এবং এটি ঘটায় রানটাইম এ ব্যর্থতা। tsc -v 2.7.2 এ
GONeale

2

আমি সবেমাত্র লক্ষ্য করেছি যে, আমি যে উত্তরটির উপরে আপত্তি ও মন্তব্য করেছি তা অস্পষ্ট। সুতরাং নিম্নলিখিতটি আমার পক্ষে ঠিক কী কাজ করেছে। আমি বর্তমানে মুহূর্ত 2.26.0এবং টিএস এ আছি 3.8.3:

কোডে:

import moment from 'moment';

টিএস কনফিগারেশনে:

{
  "compilerOptions": {
    "esModuleInterop": true,
    ...
  }
}

আমি উভয় কমনজেএস এবং ইএমএসের জন্য বিল্ডিং করছি যাতে এই কনফিগারটি অন্য কনফিগার ফাইলে আমদানি করা হয়।

অন্তর্দৃষ্টি এই উত্তর থেকে আসে যা এক্সপ্রেস ব্যবহারের সাথে সম্পর্কিত। আমি অনুভূত করেছি যে এটি যে মুহুর্তের চেয়ে কিছু বেশি সাধারণ কিছু না করে মোমেন্ট.জেএস-এর সাথে অনুসন্ধান করে এমন কাউকে সহায়তা করার জন্য এটি এখানে যুক্ত হওয়া উপযুক্ত।


তারপরে আপনি moment()স্বাভাবিকের মতো ব্যবহার করতে পারেনmoment.default()
য়

0

1. ইনস্টল মুহুর্ত

npm install moment --save

২. আপনার টাইপ স্ক্রিপ্ট ফাইলে এই কোডটি পরীক্ষা করুন

import moment = require('moment');

console.log(moment().format('LLLL'));

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

0

এখনও ভাঙা? আনইনস্টল করার চেষ্টা করুন @types/moment

সুতরাং, আমি ফাইল @types/momentথেকে প্যাকেজ সরিয়েছি package.jsonএবং এটি ব্যবহার করে কাজ করেছে:

import * as moment from 'moment'

নতুন সংস্করণগুলির momentমধ্যে @types/momentপ্যাকেজটির প্রয়োজন নেই কারণ প্রকারগুলি ইতিমধ্যে অন্তর্ভুক্ত রয়েছে।

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