c# 委托 -> 打字稿

c# delegate -> typescript

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';

在 JavaScript 和 TypeScript 中,函数首先是 class 公民,因此您不需要像在 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) {