2017-01-13 6 views
3

Я пытаюсь использовать модуль, скомпилированный с Babel в проекте TypeScript. Но у меня есть ошибка со статическими свойствами и методами.Как установить перечислимое свойство для Babel

Это помощник TypeScript для extends. Как видите, он использует for..in.

var __extends = (this && this.__extends) || function (d, b) { 
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 
    function __() { this.constructor = d; } 
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 
}; 

Есть ли способ установить enumerable для статических свойств/методов Бабеля?

enter image description here

+0

Вы можете вручную 'Object.defineProperty (XmlObject, 'LoadXml', {enumerable: true})'. Спецификация ES6 диктует, что они не перечислимы. – loganfsmyth

+2

Вы говорите, что у вас есть ошибка, но не ошибка. Статические методы не перечислены в спецификации ES6 (см. 21.b. в разделе [14.5.14 Семантика времени выполнения: ClassDefinitionEvaluation] (http://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics -classdefinitionevaluation)). Ваш скриншот показывает, что 'Test.LoadXml()' правильно вызывает 'XmlObject.LoadXml' (он записывает« Успех »). Что вы пытаетесь достичь? –

+0

@Jordan У меня нет результата в Test.LoadXml(). Это ошибка, потому что она должна иметь эту функцию. – Microshine

ответ

0

Существует а свободные опции в ES2015 classes transform плагин, значение по умолчанию false. Вы можете установить это значение true как этот

{ 
    "plugins": [ 
    ["transform-es2015-classes", { 
     "loose": true 
    }] 
    ] 
} 

С помощью этой установки, методы будут определены на объект класса прототипа. Но это вызовет некоторые другие проблемы.

class Foo { 
    set bar() { 
    throw new Error("foo!"); 
    } 
} 
class Bar extends Foo { 
    bar() { 
    // will throw an error when this method is defined 
    } 
} 

Для получения более подробной информации см. document.

 Смежные вопросы

  • Нет связанных вопросов^_^