在定义中表示 UNO 输出参数

Posted

技术标签:

【中文标题】在定义中表示 UNO 输出参数【英文标题】:Representing UNO out parameters in definitions 【发布时间】:2017-09-07 06:27:23 【问题描述】:

UNO API 支持inoutout 参数——将变量传递给函数,函数修改变量,然后修改后的变量在函数外部可用。

javascript不支持这种类型的参数调用,所以自动化桥enables a workaround——传入一个数组;索引0处的元素被修改,可以在函数外检索:

// for inout parameters
let inout = ['input value'];
obj.func(inout);
console.log(inout[0]); //could print 'new value'

对于inout 参数,由于需要初始值,因此可以使用元组类型声明函数:

declare interface Obj 
    func(inout: [string]): void;

但是,out 参数不需要初始值:

// Javascript

let out = [];
obj.func1(out);
console.log(out[0]); // could print 'new value'

AFAIK 无法表示空元组类型,空数组与元组类型不兼容。如果我用元组类型声明函数参数,我不能传入一个空数组:

// Typescript

declare interface Obj 
    func1(out: [string]): void;

let out = [];
obj.func1(out); 
// Argument of type 'any[]' is not assignable to parameter of type '[string]'.
//  Property '0' is missing in type 'any[]'.

link

我可以使用两种技巧:

    要么使用any颠覆类型系统:

    let out: [string] = [] as any;
    

    或使用初始化数组:

    let out: [string] = [''];
    

有没有更“hacky”的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您可以将inout 参数声明为inout: string[],这样您就可以传递一个空数组。

例如:

declare interface Obj 
    func(inout: string[]): void;
;

const Obj: Obj = 
    func(inout: string[]) 
        // ...
    


let arr = [];
Obj.func(arr);

【讨论】:

【参考方案2】:

Until TypeScript allows empty tuples,可以考虑将参数类型声明为undefined[]

【讨论】:

不会使用undefined[] 导致有关各个成员的所有类型信息丢失吗? 此外,即使允许空元组,我也必须在调用非空元组类型后显式转换它。

以上是关于在定义中表示 UNO 输出参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Apiary 中表示输入参数是日期/时间的正确格式是啥?

可以用Arduino Uno具有PWM输出功能的引脚控制无源蜂鸣器的音调吗?

如何将 1 添加到 JavaScript 中表示为字符串的大整数?

java中final用在参数中表示啥?

千水星 2500MA接线法

如何将(r,球形谐波)空间中表示的数据内插到常规笛卡尔网格(F90)?