ES6 অবজেক্ট থেকে সমস্ত মান রফতানি করে


112

বলুন আমার কাছে একটি মডিউল আছে ( ./my-module.js) যার একটি অবজেক্ট রয়েছে যা তার ফেরতের মান হওয়া উচিত:

let values = { a: 1, b: 2, c: 3 }

// "export values" results in SyntaxError: Unexpected token

সুতরাং আমি তাদের মতো আমদানি করতে পারি:

import {a} from './my-module'           // a === 1
import * as myModule from './my-module' // myModule.a === 1

আমি খুঁজে পেলাম একমাত্র উপায় হ'ল রফতানির কোডিং করা:

export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values

যা গতিশীল নয়।

কোনও বস্তু থেকে সমস্ত মান রফতানি করা কি সম্ভব?


6
না, কারণ গতিশীল গণিত মান স্থিতিশীলভাবে রফতানি করা যায় না।
বার্গি

@ বেরগি, আমি ভাবছি যে কোনওভাবেই মানগুলি স্থিতিশীল করা সম্ভব কিনা। আমি ভাবছিলাম আপনি যদি এটি ব্যবহার করেন তবে interface { a: number, b: number, c: number }? তাত্ত্বিকভাবে এটি সম্ভব হওয়া উচিত, তাই না?
ফ্লুভ

1
@ ফ্লাইভ export const {a, b, c} = valuesহ'ল স্থির ইন্টারফেস ঘোষণার জন্য বাক্যবিন্যাস
বার্গি

উত্তর:


39

মনে হয় না। ECMAScript 6 মডিউল থেকে উদ্ধৃতি : চূড়ান্ত বাক্য গঠন :

আপনি ভাবতে পারেন - আমরা যদি কেবল ডিফল্ট-এক্সপোর্ট অবজেক্ট (কমনজেএস এর মতো) করতে পারি তবে কেন আমাদের নামকরণকৃত রফতানি দরকার? উত্তরটি হ'ল আপনি বস্তুর মাধ্যমে স্থিতিশীল কাঠামো প্রয়োগ করতে পারবেন না এবং সম্পর্কিত সমস্ত সুবিধা (পরের অংশে বর্ণিত) হারাতে পারবেন না।


3
যদি একটি অ্যারে তাদের নাম-মান জোড়া হয় আপনি ব্যবহার করতে পারেন?
কেভিন সটল 21

79

আমি সত্যিই এই সমাধানটির চারপাশে সুপারিশ করতে পারি না তবে এটি কার্যকর হয়। কোনও বস্তু রফতানি করার পরিবর্তে, আপনি প্রতিটি সদস্যের নাম রফতানি ব্যবহার করেন use অন্য একটি ফাইলে, প্রথম মডিউলের নামকৃত রফতানি কোনও বস্তুর মধ্যে আমদানি করুন এবং সেই বস্তুটি ডিফল্ট হিসাবে রফতানি করুন। প্রথম মডিউলটি ব্যবহার করে নামযুক্ত সমস্ত রফতানিও রফতানি করুনexport * from './file1';

মান / value.js

let a = 1;
let b = 2;
let c = 3;

export {a, b, c};

মান / index.js

import * as values from './value';

export default values;
export * from './value';

index.js

import values, {a} from './values';

console.log(values, a); // {a: 1, b: 2, c: 3} 1

2
আপনি এটি সুপারিশ করবেন না কেন?
jsdario

2
সম্ভবত নিরাময়টি অসুস্থতার চেয়েও খারাপ (যদি না আপনি একটি সর্বজনীনভাবে গ্রাহ্য গ্রন্থাগার না লিখে থাকেন এবং আপনি কীভাবে এটি আমদানি করবেন সে সম্পর্কে সত্যই পছন্দ করছেন)?
মেশিনঘস্ট

হ্যাঁ, এটি একটি ভাল সংক্ষিপ্তসার। এটি এমন কৌশল যা আমি গ্রাহকতায় একবার ব্যবহারযোগ্যতা সহজ করার জন্য ব্যবহার করেছিলাম। আমি মনে করি লাইব্রেরি লেখকের পক্ষে এটি আরও বেশি কাজ করা সত্ত্বেও একক ফাইলের মধ্যে রফতানি পরিচালনা করা ভাল be ফলাফলটি ব্যবহারকারীর জন্য একটি কম মডিউল গভীরতা।
ryanjduffy

আমি এই কাজটি প্রায় পছন্দ করি তবে এটি মান / সূচক.জেজে '। / মূল্যবোধের' পরিবর্তে './value' হওয়া উচিত, তাই না?
জান পাপকে

1
আমি সত্যিই এই উত্তরটি মনে করি না, যেহেতু যদি আমি ইতিমধ্যে রফতানি করি তবে { a, b, c }কেন আমাকে আবার রফতানি করতে হবে? আসল প্রশ্নটি যদি আমার কাছে থাকে const obj = { a, b, c }এবং আমি কীভাবে আপত্তিটির সমস্ত সদস্য রফতানি করতে পারি? আমি অনুমান করি উত্তরটি নেই।
উইন্ডমায়াও

14

এই কুরুচিপূর্ণ কিন্তু কার্যক্ষম সমাধানটি চেষ্টা করুন:

// use CommonJS to export all keys
module.exports = { a: 1, b: 2, c: 3 };

// import by key
import { a, b, c } from 'commonjs-style-module';
console.log(a, b, c);

12

আমার একটি কনফিগার ফাইলের জন্য এটি করা দরকার ছিল।

var config = {
    x: "CHANGE_ME",
    y: "CHANGE_ME",
    z: "CHANGE_ME"
}

export default config;

আপনি এটি এইভাবে করতে পারেন

import { default as config } from "./config";

console.log(config.x); // CHANGE_ME

এটি টাইপস্ক্রিপ্ট মনে মনে ব্যবহার করছে।


34
আপনি করতে সক্ষম হবেনimport config from './config';
ম্যাট হামান

4
export const a = 1;
export const b = 2;
export const c = 3;

এটি ডাব্লু / বাবেল আজকের রূপান্তরগুলিতে কাজ করবে এবং যখনই বৈশিষ্ট্যটি ব্রাউজারে আসবে তখনই ES2016 মডিউলগুলির সমস্ত সুবিধা গ্রহণ করা উচিত।

আপনি যুক্ত করতে পারেন export default {a, b, c};যা আপনাকে সমস্ত মানকে একটি অবজেক্ট / ডাব্লু * as, অর্থাৎ আমদানি করার অনুমতি দেবেimport myModule from 'my-module';

সূত্র:


3

আমি নিম্নলিখিতটি পরামর্শ দিই, আসুন একটি মডিউল.জেএস আশা করি :

const values = { a: 1, b: 2, c: 3 };

export { values }; // you could use default, but I'm specific here

এবং তারপরে আপনি একটি সূচি.জেএস এ করতে পারেন :

import { values } from "module";

// directly access the object
console.log(values.a); // 1

// object destructuring
const { a, b, c } = values; 
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

// selective object destructering with renaming
const { a:k, c:m } = values;
console.log(k); // 1
console.log(m); // 3

// selective object destructering with renaming and default value
const { a:x, b:y, d:z = 0 } = values;
console.log(x); // 1
console.log(y); // 2
console.log(z); // 0

ধ্বংসাত্মক অবজেক্টের আরও উদাহরণ: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / অপারেটর / ডিস্ট্রাকচারিং_সাইগমেন্ট 89 ওজেক্ট_ডেসট্রাকচারিং


3

প্রতিটি উত্তরের জন্য আমদানির বিবৃতি পরিবর্তন করা দরকার।

আপনি যদি ব্যবহার করতে সক্ষম হতে চান:

import {a} from './my-module'           // a === 1
import * as myModule from './my-module' // myModule.a === 1

যেমন প্রশ্নে রয়েছে, এবং আপনার my-moduleযা আছে তা আপনাকে একটি সামগ্রীতে রফতানি করতে হবে (যা কার্যকর হতে পারে উদাহরণস্বরূপ যদি আপনি জোয়াই বা জেএসএন স্কিমার সাথে রফতানি করা মানগুলি বৈধ করতে চান) তবে আপনার my-moduleহতে হবে:

let values = { a: 1, b: 2, c: 3 }
let {a, b, c} = values;
export {a, b, c};

বা:

let values = { a: 1, b: 2, c: 3 }
export let {a, b, c} = values;

সুন্দর নয়, তবে এটি আপনার যা প্রয়োজন তা সংকলন করে।

দেখুন: বাবেল উদাহরণ


3

আপনি জাভাস্ক্রিপ্ট দিয়ে প্রচুর বোকা জিনিস করতে পারেন। আমি এই উদ্ধৃতিটি YDKJS বইটি থেকে এখানে রেখে যাব।

এখানে চিত্র বর্ণনা লিখুন

বইয়ের পৃষ্ঠা উল্লেখ করা হয়েছে ->

https://books.google.com.tr/books?id=iOc6CwAAQBAJ&pg=PT150&lpg=PT150&dq=JS+engine+cannot+statically+analyze+the+contents+of+plain+object&source=bl&ots=7v8fMUgwhx&sig=dP3BpY7mEvpvfyxO_koWaXczBWI&hl=en&sa= এক্স & বেদ = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # বনাম = onepage & Q = জাতীয়% 20engine% 20cannot% 20statically% 20analyze% 20% 20contents% 20of% 20plain% 20object & F = মিথ্যা


2

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

Variables.js

export const var1 = 'first';
export const var2 = 'second':
...
export const varN = 'nth';

Other.js

import * as vars from './Variables';

export const Variables = vars;

Third.js

import { Variables } from './Other';

Variables.var2 === 'second'

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