Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么类型脚本标识符和构造(除了枚举)和#x27;生存';编译,并且可以在运行时用JavaScript访问?_Javascript_Typescript - Fatal编程技术网

什么类型脚本标识符和构造(除了枚举)和#x27;生存';编译,并且可以在运行时用JavaScript访问?

什么类型脚本标识符和构造(除了枚举)和#x27;生存';编译,并且可以在运行时用JavaScript访问?,javascript,typescript,Javascript,Typescript,TypeScript编译为JavaScript,从生成的JavaScript代码中剥离几乎所有的TypeScript语法和标识符。如果给定的TypeScript语法不是有效的JavaScript代码,那么在编译的输出中就看不到它的踪迹 我知道的一个例外是enum TypeScript代码(在JS中无效) 在编译的JavaScript输出中实际显示为 var Alph; (function (Alph) { Alph[Alph["a"] = 0] = "a"; Alph[Alph[

TypeScript编译为JavaScript,从生成的JavaScript代码中剥离几乎所有的TypeScript语法和标识符。如果给定的TypeScript语法不是有效的JavaScript代码,那么在编译的输出中就看不到它的踪迹

我知道的一个例外是
enum

TypeScript代码(在JS中无效)

在编译的JavaScript输出中实际显示为

var Alph;
(function (Alph) {
    Alph[Alph["a"] = 0] = "a";
    Alph[Alph["b"] = 1] = "b";
    Alph["c"] = "www";
})(Alph || (Alph = {}));
问题: 除了
enum
,什么类型的脚本语法结构不是JS结构,编译成一些JavaScript代码而不是消失?我特别感兴趣的是在JS中公开TypeScript标识符的构造,比如
enum
does

澄清 下面是一个例子,当我谈到特定于类型脚本的构造和标识符从输出中“消失”时,我想到了什么

打字稿

interface Inter {
    a: number;
}

class C implements Inter {
    a: number = 1;
}

var b: number = 1;
JavaScript编译器输出

class C {
    constructor() {
        this.a = 1;
    }
}

var b = 1;
您可以看到没有
接口
实现
内部
编号
的痕迹。但是变量声明和赋值没有改变,
class
被传递给JS,几乎没有改变

默认值已移动到构造函数中,因此属性默认值可能是我正在寻找的一个小示例。不能只是复制或删除,但必须经过一些转换才能在JS中有意义的结构

“除了enum之外,在运行时必须转换为其他内容的TS构造是什么?”

简言之,答案是所有这些,只是多少的问题。请记住,Typescript既是一个类型系统,也是一个编译器。您的代码将被重建到一个抽象的源代码树中,然后根据编译器的逻辑重新发出。所以所有的东西都在被转换,只是大多数时候输出和原始代码非常相似


所以我要回答一个更明确的问题,我想你会问:

什么类型脚本关键字在JS中不存在,但在编译时会发出JS代码

有一些事情(比如,或者)。这些项目正处于JS的提案阶段,但尚未被广泛采用,或由其他标准或Transpiler定义,已成为typescript语言中的一等公民。对于这些情况,typescript输出一个等价的实现,它应该在所有现代JS解释器中工作,这些解释器生成了程序员不打算直接使用的大量代码

但是我假设您也不太关心这些情况,因为如果所有解释器都以相同的方式支持这些构造,那么生成的代码可能会被删除


因此,剩下:

  • (尽管我认为现在对于新的typescript代码不鼓励使用
    名称空间
    ,而且支持代码非常少)

是的。很确定,这就是全部。

真的不清楚你所说的“消失”是什么意思。你想做的具体事情的例子是什么?@Pointy我补充了说明。一旦TypeScript被编译(或传输,如果你愿意)为JavaScript,它实际上就是JavaScript。JavaScript没有
接口
或类型化变量的概念,因此这些概念没有任何地方可以表达。因此,除非TypeScript中有类似于类型内省的功能,否则JavaScript结果中不会出现这种情况。@Pointy我知道,但是JavaScript也没有
enum
的概念,但是有一种方法可以在JavaScript中表示这个概念。我正在寻找TypeScript中的其他机制,如
enum
s。它们存在于TypeScript中,JavaScript没有它们的概念,然而TypeScript编译器以某种方式将它们引入到输出JavaScript代码中。??每一个类型脚本构造都是如此。它被翻译成普通的JavaScript。很好的回答!非常感谢。我会接受它,如果有人提出其他有趣的东西,我会等一等。
class C {
    constructor() {
        this.a = 1;
    }
}

var b = 1;