资讯专栏INFORMATION COLUMN

在TypeScript项目中像PHP一样使用魔术变量

?xiaoxiao, / 2793人阅读

摘要:当中有许多很有用的魔术变量比如之类但是中并没有因此我写了一个插件来使用它们源代码已经放到了上使用方法首先你需要安装这个包修改一下你的在代码中使用魔术变量比如用来编译你的项目注意这里不能用因为没有开放接口需要全局安装一

PHP 当中有许多很有用的魔术变量, 比如__CLASS__, __METHOD__之类. 但是typescript中并没有. 因此我写了一个插件typescript-magic-variable-plugin来使用它们, 源代码已经放到了GitHub上: https://github.com/acrazing/t....

使用方法

首先你需要安装这个包: npm install -D typescript-magic-variable-plugin

修改一下你的tsconfig:

{
    "compilerOptions": {
        "plugins": [
            { "transform": "typescript-magic-variable-plugin" }
        ]
    },
    "include": [
        // ...
        "./node_modules/typescript/magic-variable-plugin/types/globals.d.ts"
    ]
}

在代码中使用魔术变量, 比如:

export class Foo {
    constructor() {
        console.log(__CLASS__)
    }
}

ttypescript来编译你的项目, 注意这里不能用typescript, 因为没有开放transform接口, 需要全局安装一下ttypescript: npm i -g ttypescript, 然后调用ttsc来编译.

进阶

也可以在webpack中使用:

const { createMagicVariableTransformer } = require("typescript-magic-variable-plugin")
// ...
rules: [
    {
        test: /.tsx?$/,
        loader: "awesome-typescript-loader",
        options: {
            // ... other loader"s options
            getCustomTransformers: program => ({
                before: [
                   createMagicVariableTransformer(program, {})
                ]
            })
        }
    }
]

目前支持的变量:

name type description
__NAMESPACE__ string the full name of the current namespace, use . to join the parents
__CLASS__ string the class name of the declaring class
__METHOD__ string the method name of the declaring method
__FUNCTION__ string the function name of the declaring function
__DIR__ string the current directory of the code
__FILE__ string the current file full name of the code
__LINE__ number the current line number

可以自动给React的组件添加displayName属性, 默认开启, 比如:

export class Foo extends Component {}

会自动给Foo增加静态属性: Foo.displayName = "Foo"

配置:

interface Options {
    addDisplayName: boolean; // 是否给react组件添加displayName属性, 默认开启
    rootDir: string; // __DIR__的相对路径, 默认为tscofnig.json中的rootDir或者当前文件夹
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108465.html

相关文章

  • php超全局变量魔术常量,魔术方法

    摘要:注意和是不同的变量,处理它们的方式不同变量说明默认情况下包含了,和的数组。包含相同的信息,但它不是一个超全局变量。这些特殊的常量不区分大小写,如下几个的魔术常量名称说明文件中的当前行号。 整理了下关于php的基础知识,参考了些资料,如下: 超全局变量 超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量: $GLOBALS $GLOBALS — 引用全局作用域中可用的全部变量 ...

    mj 评论0 收藏0
  • php易错笔记-类与对象,命名空间

    摘要:类与对象基本概念如果在之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。如果该类属于一个名字空间,则必须使用其完整名称。如果一个类被声明为,则不能被继承。命名空间通过关键字来声明。 类与对象 基本概念 new:如果在 new 之后跟着的是一个包含有类名的字符串,则该类的一个实例被创建。如果该类属于一个名字空间,则必须使用其完整名称。 Example #3 创建一个实例 ...

    MartinHan 评论0 收藏0
  • PHP - 魔术常量、魔术方法

    摘要:魔术方法构造函数允行开发者在一个类中定义一个方法作为构造函数。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承假如没有被定义为的话。和函数会检查类中是否存在一个魔术方法。魔术常量魔法方法 PHP - 魔术常量 __LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 __DIR__ 文件所在的目录。如果用在...

    qpal 评论0 收藏0
  • PHP面试常考内容之面向对象(2)

    摘要:继上一篇面试常考内容之面向对象发表后,今天更新,需要的可以直接点击文字进行跳转获取。析构函数,当对象被销毁时调用。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(1)发表后,今天更新(2),需要(1)的可以直接点击文字进行跳转获取。整个面向对象文章的结构涉及的内容模块有: 一、面向对象与面向过程有什么区别?二、面向对...

    Barry_Ng 评论0 收藏0
  • PHP_OOP

    摘要:特殊在,方法被对象调用执行时,会自动确定是那个对象调用的该方法,会使用该对象为方法内的赋值构造析构类,没有作用域,作用域,只是讲,函数内和函数外。析构在对象消失对象被销毁时,也会自动执行一个方法,称之为析构方法。 相关定义 对象(object):现实生活中的实体,在编程语言中的体现。实体都有属性和功能。一组数据,和操作管理这些数据的操作,定义在一起就形成了一个实体,称之为对象。(属性和...

    RiverLi 评论0 收藏0

发表评论

0条评论

?xiaoxiao,

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<