-3

c# 代码

enum myEnum
{
    aa = 0,
    bb,
    cc,
}

public delegate void MyDelegate(myEnum _myEnum, params object[] _params);

public Dectionary<myEnum , MyDelegate> dicMyDelegate = new Dectionary<myEnum , MyDelegate>();

public void GameDelegate(myEnum _myEnum, MyDelegate _Func)
{
    if(dicMyDelegate .ContainsKey(_myEnum))
    {
        MyDelegate Func;
        dicMyDelegate.TryGetValue(_myEnum, out Func);
        Func += _Func;
    }
    else
    {
        dicMyDelegate.Add(_myEnum, _Func);
    }
}

public void GameCallBack(myEnum _myEnum)
{
    if(!dicMyDelegate.ContainsKey(_myEnum)) return;
    MyDelegate Func;
    dicMyDelegate.TryGetValue(_myEnum, out Funk);
    if(Func == null) return;
    Func(_myEnum);
}

====================================================

cocos 创建者 TypeScript。我不知道....请。我现在在学习。

public delegate void MyDelegate(myEnum _myEnum, params object[] _params);

public Dectionary<myEnum , MyDelegate> dicMyDelegate = new Dectionary<myEnum , MyDelegate>();

很难用类型脚本替换上面的代码。

我整天都在网上搜索。

declare module "Delegate"
{   
    export function MyDelegate(_myEnum: myEnum , args: any[]) : void;
}

import {MyDelegate} from 'Delegate';
4

1 回答 1

1

在 JavaScript 和 TypeScript 中,函数是一等公民,因此您无需像在 C# 中那样解决问题。

function example(name: string) : string {
    return 'Hello ' + name;
}

function acceptsFunction(func: Function) {
    // Calling the function that was passed as an argument
    const result = func('Steve');
    console.log(result);
}

// Calling a function, passing another function as an argument
acceptsFunction(example);

在上面的示例中,您可以将函数作为参数传递,并使用参数调用它——所有这些都没有额外的复杂性。

您可以通过指定必须传递的函数类型来提高类型安全性:

function acceptsFunction(func: (name: string) => string) {
于 2018-10-31T14:58:56.800 回答