Katakanlah saya memiliki modul ( ./my-module.js
) yang memiliki objek yang seharusnya menjadi nilai kembaliannya:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
Jadi saya bisa mengimpornya seperti:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
Satu-satunya cara yang saya temukan adalah dengan melakukan hard coding pada ekspor:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
Yang tidak dinamis.
Apakah mungkin untuk mengekspor semua nilai dari suatu objek?
module
export
ecmascript-6
mauvm.dll
sumber
sumber
interface { a: number, b: number, c: number }
? Secara teoritis seharusnya mungkin, bukan?export const {a, b, c} = values
adalah sintaks yang tepat untuk mendeklarasikan antarmuka statisJawaban:
Sepertinya tidak. Kutipan dari modul ECMAScript 6: sintaks terakhir :
sumber
Saya tidak dapat merekomendasikan
solusiini untukmengatasi masalahtetapi berfungsi. Daripada mengekspor objek, Anda menggunakan ekspor bernama setiap anggota. Di file lain, impor ekspor bernama modul pertama ke dalam objek dan ekspor objek itu sebagai default. Juga ekspor semua ekspor bernama dari modul pertama menggunakanexport * from './file1';
nilai / nilai js
nilai / index.js
index.js
sumber
{ a, b, c }
, mengapa saya perlu mengekspor lagi? Pertanyaan sebenarnya adalah bagaimana jika saya hanya punyaconst obj = { a, b, c }
dan dapatkah saya mengekspor obj semua anggota? Saya kira jawabannya TIDAK.coba solusi jelek tapi bisa diterapkan ini:
sumber
Saya hanya perlu melakukan ini untuk file konfigurasi.
Anda bisa melakukannya seperti ini
Ini menggunakan Ketikan pikiran Anda.
sumber
import config from './config';
Ini akan berfungsi dengan transformasi Babel hari ini dan harus memanfaatkan semua manfaat modul ES2016 setiap kali fitur itu benar-benar masuk ke browser.
Anda juga dapat menambahkan
export default {a, b, c};
yang akan memungkinkan Anda untuk mengimpor semua nilai sebagai objek tanpa* as
, yaituimport myModule from 'my-module';
Sumber:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
sumber
Saya menyarankan yang berikut, mari kita harapkan module.js :
dan kemudian Anda bisa melakukannya di index.js :
Contoh lainnya dari objek yang merusak: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
sumber
Setiap jawaban membutuhkan perubahan pernyataan impor.
Jika Anda ingin dapat menggunakan:
seperti dalam pertanyaan, dan dalam diri Anda,
my-module
Anda memiliki semua yang Anda butuhkan untuk diekspor dalam satu objek (yang dapat berguna misalnya jika Anda ingin memvalidasi nilai yang diekspor dengan Joi atau JSON Schema) maka Andamy-module
harus:Atau:
Tidak cantik, tetapi mengkompilasi sesuai kebutuhan Anda.
Lihat: Contoh Babel
sumber
Anda dapat melakukan banyak hal bodoh dengan javascript. Saya akan meninggalkan kutipan ini di sini dari buku YDKJS.
Halaman buku yang disebutkan ->
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=7v8fMUgwhz&sig=dO=en&pvIX X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # v = onepage & q = JS% 20engine% 20cannot% 20statically% 20analyze% 20the% 20contents% 20of% 20plain% 20object & f = false
sumber
Mengekspor setiap variabel dari file variabel Anda. Kemudian mengimpornya dengan * seperti pada file Anda yang lain dan mengekspornya sebagai konstanta dari file itu akan memberi Anda objek dinamis dengan ekspor bernama dari file pertama menjadi atribut pada objek yang diekspor dari yang kedua.
Variables.js
Other.js
Third.js
sumber