【问题标题】:How do I retrieve the custom type of a typescript variable at runtime如何在运行时检索打字稿变量的自定义类型
【发布时间】:2017-12-06 02:55:14
【问题描述】:

我正在定义自定义类型“标识符”并创建此类型的变量,但在运行时无法获取此变量的类型

type Identifier = number;

let myNumber: number;
let myIdentifier: Identifier;

console.log(`myNumber is a ${typeof myNumber}`);
console.log(`myIdentifier is a ${typeof myIdentifier}`);

myNumber = 1234;
myIdentifier = 1234;

console.log(`myNumber is a ${typeof myNumber}`);
console.log(`myIdentifier is a ${typeof myIdentifier}`);

当我运行上面的代码时,我会在控制台中得到以下结果

myNumber 是未定义的

myIdentifier 是未定义的

myNumber 是一个数字

myIdentifier 是一个数字

我的第一个问题是,当变量没有值时,我得到一个 undefined。

我的第二个问题是,当我为 myIdentifier 赋值时,类型是数字而不是 Identifer。

我这样做的原因是为了将标识符区分为特殊类型,以便以后进行特殊处理。

【问题讨论】:

    标签: typescript types typeof


    【解决方案1】:
    1. 因为 typescript 是编译成 JavaScript,而 JavaScript 不是静态类型,所以在运行时,你不会知道变量的类型,只知道变量所持有的值的类型。这就是您看到“未定义”而不是“数字”的原因。此外,javascript 中没有“标识符”的概念(当您编译为 javascript 时已经剥离),因此您看到的是“数字”而不是“标识符”。

    2. 即使在其他编程语言上,当您像以前那样定义类型别名时,它也只会在编译时有所帮助,而不是运行时。所以你只看到数字,而不是标识符。

    【讨论】:

    • 对如何以不同方式实现我的目标有什么建议吗?
    • 您可以定义一个类Identifier并将值作为属性。然后通过variable.constructor.name == Identifier 检查。但请记住将变量初始化为默认值而不是undefined
    • 如果我尝试以下代码 class Identifier { constructor(public value:number) {} } let myIdentifier: Identifier;控制台.log(myIdentifier is a ${typeof myIdentifier}); myIdentifier = 新标识符(1234);控制台.log(myIdentifier is a ${typeof myIdentifier});我得到以下结果 myIdentifier is a object myIdentifier is a undefined
    • typeof myIdentifier is 'object',需要检查myIdentifier.constructor.name
    猜你喜欢
    • 2016-04-28
    • 2019-01-02
    • 2018-12-13
    • 2017-12-19
    • 2013-03-24
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多