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

Posted

技术标签:

【中文标题】为啥在打字稿中用方括号括起来的名称声明方法?【英文标题】:why declare method within square brackets wrapped around name in typescript?为什么在打字稿中用方括号括起来的名称声明方法? 【发布时间】:2017-12-05 09:39:59 【问题描述】:

我一直在浏览 nativescript 代码库,以了解如何为 N 3.0.1 更新我的一些插件,并且我看到了很多这样的类方法。

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

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

为什么从 image-common.ts 导出的 const 的属性在 image.android.ts 方法中使用,为什么它们用方括号括起来?

【问题讨论】:

【参考方案1】:

它会在该类的原型上生成一个具有计算名称的属性。

虽然不是很使用这个完全有效的 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。

【讨论】:

这是非常不寻常的,我也是第一次看到它,但它是有道理的。从语法的角度来看。 确实如此。只是一开始没有这么想

以上是关于为啥在打字稿中用方括号括起来的名称声明方法?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式查找数字并在段落中用括号括起来

为啥内置属性指令用方括号括起来?

为啥将 C 代码块用花括号括起来?

PHP:为啥用括号括起来的函数调用会阻止“通过引用”通知? [复制]

在 Windows Batch 中,为啥用括号括起来的 for 循环不会扩展它被告知要回显的变量?

为啥括号会影响 TypeScript 中的类型缩小?