9

Ben ESLint aşağıdaki sözdiziminde default ihracat tanımadığı için benim ES2015 modülü ithalat/ihracat doğrulama eklentisi hakkında bir issue on GitHub alınanDışa aktarma {foo olarak varsayılan} geçerli ES2015 mi?</p> <pre><code>export { foo as default, bar } </code></pre> <p>benim eklenti aşağıdaki (? Eşdeğeri) Lint olacak sözdizimi sorun:

export default foo; 
export const bar = ..; 

hem Babel ve Esprima hatasız benzer sözdizimi ayrıştırmak ve bu iki ucunda (ithalat ve ihracat) üzerinde Babel kullanarak kod çalışır. StringValue n bir ReservedWord veya stringvalue eğer varsa bir sözdizimi hatası geçerli: ExportClause arasında ReferencedBindings her IdentifierNamen için

:

Ancak, ben spec eski export { x as default } formunu verir ikna olmuş değilim n, "uygular", "arabirim", "izin", "paket", "özel", "korunan", "genel", "statik" veya "verim" ifadelerinden biridir.

ReservedWorddoes include default

, bir tane ReferencedBindings ihraç edilmektedir specifically to the module-local identifier names (yani foo) olup dışa isim kendisi atıfta iddia edilebilir düşünmektedir. Ayrılmış sözcükleri ihraç edebilmek için genellikle garip bir şey gibi görünmektedir; export { foo as default } ES2015 bir varsayılan ihracat geçerli bir yoldur: Babel mutlu da özetle Yani
// ./foo.js 
export { foo as yield } 
// ./mod.js 
import { yield as nonReservedIdentifier } from './foo' 

gibi bir şey, izin verecektir?

cevap

8

Evet, ReferencedBindings yalnızca ilk IdentifierName ile ilgilidir. Yani

export { default as something } // or 
export { default } 

geçersiz olduğunu, ancak

export { something as default } 

değildir. ESLint'in burada bir düzeltmeye ihtiyacı olacak.

+0

Bu durumda, "varsayılan", varsayılan olarak veya varsayılan "varsayılan" dışa aktarma adında bir adlandırılmış dışa aktarmadır? –

+0

[import spec] (http://www.ecma-international.org/ecma-262/6.0/#sec-static-semantics-importentriesformodule), her ikisinin de olduğunu tahmin ediyor. –

+0

Evet, varsayılan dışa aktarma, yalnızca "varsayılan" adı verilen bir dışa aktarma bağlamasıdır. Her ikisi de öyle ki, varsayılan dışa aktarma/içe aktarma için özel sözdizimi ve "varsayılan" geçersiz bir yerel tanımlayıcıdır. – Bergi

6

Evet, geçerli. Onu kıracağım.

  1. :

    export { foo as default } 
    

    Bu (en azdan en spesifik kadar) aşağıdaki yapımları eşleşir:

    15.2:

    export ExportClause 
    ExportClause : { ExportsList } 
    ExportsList : ExportSpecifier 
    ExportSpecifier : IdentifierName as IdentifierName  
    
  2. Sonra early error semantics var. 3.1 Statik Semantik: Erken Hatalar

    ExportClause arasında ReferencedBindings her IdentifierNamen için

    ExportDeclaration : export ExportClause ;

    : n ait StringValue bir ReservedWord olup olmadığı

    Bu

    herhangi yapımları için geçerli ... bir sözdizimi hatası olduğunu örnek sözdizimi dahil export ExportClause ile eşleşme. Bu, ReferencedBindings algoritmasını çağırır. Bu sözdizimi ile eşleşen en özel için de geçerlidir

  3. ReferencedBindings algoritmasıdır:

    ExportSpecifier : IdentifierName as IdentifierName

    geri ilk IdentifierName ihtiva eden bir List.

Yani ReservedWord ve listelenen diğer değerleri ile ilgili kısıtlama yalnızca örnekte sözdizimi foo kısmına uygulanır görüyoruz.

İlgili konular