为什么在打字稿中用方括号括起名称来声明方法?

why declare method within square brackets wrapped around name in typescript?

我一直在研究 nativescript 代码库,看看如何为 {N} 3.0.1 更新我的一些插件,我看到了很多 class 这样的方法。

[srcProperty.setNative](value: any) {
    this._createImageSourceFromSrc(value);
}

查看 image-common.ts and image.android.ts 的内容以查看完整源代码。

为什么 image-common.ts 导出的常量的属性用在 image.android.ts 方法中, 为什么用方括号括起来?

它在那个 class 的原型上生成一个 属性 和 计算名称

虽然没有很好地使用这个完全有效的 javascript/typescript 代码。不过,它确实会导致一些输入丢失。

此打字稿代码:

let propName = 'someMethod';

class A {
  [propName](): number {
    console.log(propName);
    return 5;
  }
}

let a = new A();

let x = a[propName]()

将导致此 javascript 输出。

var propName = 'someMethod';
var A = (function () {
    function A() {
    }
    A.prototype[propName] = function () {
        console.log(propName);
        return 5;
    };
    return A;
}());
var a = new A();
var x = a[propName]();

你可以看到一个工作示例here