1

x-tag 仕様には、純粋な JS で次の署名があります -

xtag.register('x-accordion', {
    // extend existing elements
    extends: 'div',
    mixins: ['superdefaults', 'otherdefaults'],
    lifecycle:{
        created: function(){
            // fired once at the time a component
            // is initially created or parsed
        },
        inserted: function(){
            // fired each time a component
            // is inserted into the DOM
        },
        removed: function(){
            // fired each time an element
            // is removed from DOM
        },
        attributeChanged: function(){
            // fired when attributes are set
        }
    },
    events: {
        'click:delegate(x-toggler)': function(){
            // activate a clicked toggler
        }
    },
    accessors: {
        'togglers': {
            get: function(){
                // return all toggler children
            },
            set: function(value){
                // set the toggler children
            }
         }
    },
    methods: {
        nextToggler: function(){
            // activate the next toggler
        },
        previousToggler: function(){
            // activate the previous toggler
        }
    }
});

明らかに、メソッド、アクセサー、およびイベントは複数のエントリを持つことができます。

register 関数に渡されるオブジェクト リテラルに相当する Typescript を定義しようとしています。これを達成する方法はありますか?

4

1 に答える 1

3

メソッド、アクセサー、およびイベントの秘密は、文字列インデクサーを使用することです。その部分だけ書くつもりだったのですが、結局それがほとんどだったので、それで終わりました。

declare module xtag {
    interface RegisterParams {
        extends?: string;
        prototype?: any;
        mixins?: string[];
        lifecycle?: {
            created?: () => void;
            inserted?: () => void;
            removed?: () => void;
            attributeChanged?: () => void;
        }
        events: { [name: string]: () => void; };
        accessors: {[name: string]: {
            get?: () => any;
            set?: (value: any) => any;
            attribute?: any;
        }};
        methods: { [name: string]: () => void; }
    }
    export function register(tagName: string, params: RegisterParams): void;
}

ここにインデクサーの適切な説明があります。getaccessorsと set が属性と相互に排他的であることを表現する方法はありません。そこでできる最善のことは、それらをオプションにすることです。

于 2014-01-22T16:39:01.817 に答える