Javascript 铅字吊装

Javascript 铅字吊装,javascript,typescript,Javascript,Typescript,我正在努力理解打字稿中的提升。提升是否在Typescript中发生?如果是,与Javascript中发生的方式相比是否有任何区别 即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情 getCarDetails({name: 'Xyz', topSpeed: 300}) function getCarDetails(carDetails: CarDetails) { console.log(carD

我正在努力理解打字稿中的提升。提升是否在Typescript中发生?如果是,与Javascript中发生的方式相比是否有任何区别

即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情

getCarDetails({name: 'Xyz', topSpeed: 300})

function getCarDetails(carDetails: CarDetails) {

  console.log(carDetails.name);

  console.log(carDetails.topSpeed);

}

interface CarDetails {

  name: string;

  topSpeed: number;

}
吊装是否以打字方式进行,如果是

对。TS只是添加了位的JS

与Javascript中的实现方式相比有什么不同吗

没有

即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情

getCarDetails({name: 'Xyz', topSpeed: 300})

function getCarDetails(carDetails: CarDetails) {

  console.log(carDetails.name);

  console.log(carDetails.topSpeed);

}

interface CarDetails {

  name: string;

  topSpeed: number;

}
接口仅用于类型检查,这仅发生在TypeScript中(即在构建时和linting工具中)。JavaScript不支持接口,因此在传输过程中将丢弃这些接口

吊装是否以打字方式进行,如果是

对。TS只是添加了位的JS

与Javascript中的实现方式相比有什么不同吗

没有

即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情

getCarDetails({name: 'Xyz', topSpeed: 300})

function getCarDetails(carDetails: CarDetails) {

  console.log(carDetails.name);

  console.log(carDetails.topSpeed);

}

interface CarDetails {

  name: string;

  topSpeed: number;

}
接口仅用于类型检查,这仅发生在TypeScript中(即在构建时和linting工具中)。JavaScript不支持接口,因此在传输过程中将丢弃这些接口

吊装是否以打字脚本进行

如果您的问题是“TypeScript是否会导致代码的提升行为?”,那么答案是“否,它不会”

TypeScript在运行时不存在,仅在编译时存在。而“提升”是一个与运行JavaScript代码相关的概念。TypeScript对这一点的影响与Notepad++一样大——不管您是否真的在那里编写代码。也就是说,它对吊装没有影响。JavaScript引擎在执行代码时执行此操作。这(可能)远远超过了TypeScript编译器完成的时间

但是,如果问题是“用TypeScript编写的代码是否仍表现出提升行为?”,答案是“是的,但与用TypeScript编写的事实没有任何关系”。无论是否存在TypeScript,它都会表现出相同的行为

即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情

getCarDetails({name: 'Xyz', topSpeed: 300})

function getCarDetails(carDetails: CarDetails) {

  console.log(carDetails.name);

  console.log(carDetails.topSpeed);

}

interface CarDetails {

  name: string;

  topSpeed: number;

}
为了清楚起见,术语“提升”指的是在运行代码之前正在处理的声明。此JavaScript代码由于以下原因而起作用:

fn();
function fn() {};
此类型脚本代码不使用*:

const x: Foo = {id: 1};

interface Foo {
  id: number;
}
类型系统仅在编译时存在。编译后,任何类型脚本构造(如接口)都将被删除。因为它们在JavaScript中不存在,所以在使用它们之前强制定义接口是一种任意和无用的限制

问题中的TypeScript代码包含以下JavaScript代码:

getCarDetails({ name: 'Xyz', topSpeed: 300 });
function getCarDetails(carDetails) {
    console.log(carDetails.name);
    console.log(carDetails.topSpeed);
}
因此,当代码运行时,只有
getCarDetails()
将被提升


*。这就是导致死亡的行为。这仅仅是为了完整性——在给定的示例中不相关

吊装是否以打字脚本进行

如果您的问题是“TypeScript是否会导致代码的提升行为?”,那么答案是“否,它不会”

TypeScript在运行时不存在,仅在编译时存在。而“提升”是一个与运行JavaScript代码相关的概念。TypeScript对这一点的影响与Notepad++一样大——不管您是否真的在那里编写代码。也就是说,它对吊装没有影响。JavaScript引擎在执行代码时执行此操作。这(可能)远远超过了TypeScript编译器完成的时间

但是,如果问题是“用TypeScript编写的代码是否仍表现出提升行为?”,答案是“是的,但与用TypeScript编写的事实没有任何关系”。无论是否存在TypeScript,它都会表现出相同的行为

即使我在使用它的函数之后声明了接口,代码仍然可以正常传输。是否可以安全地假设它是由于作为蒸腾的一部分的提升而发生的,或者这里涉及到其他一些事情

getCarDetails({name: 'Xyz', topSpeed: 300})

function getCarDetails(carDetails: CarDetails) {

  console.log(carDetails.name);

  console.log(carDetails.topSpeed);

}

interface CarDetails {

  name: string;

  topSpeed: number;

}
为了清楚起见,术语“提升”指的是在运行代码之前正在处理的声明。此JavaScript代码由于以下原因而起作用:

fn();
function fn() {};
此类型脚本代码不使用*:

const x: Foo = {id: 1};

interface Foo {
  id: number;
}
类型系统仅在编译时存在。编译后,任何类型脚本构造(如接口)都将被删除。因为它们在JavaScript中不存在,所以在使用它们之前强制定义接口是一种任意和无用的限制

问题中的TypeScript代码包含以下JavaScript代码:

getCarDetails({ name: 'Xyz', topSpeed: 300 });
function getCarDetails(carDetails) {
    console.log(carDetails.name);
    console.log(carDetails.topSpeed);
}
因此,当代码运行时,只有
getCarDetails()
将被提升



*。这就是导致死亡的行为。这仅仅是为了完整性-在给定的示例中不相关。

@VLAZ:您能否对下面提供的答案进行一次思考,其中提到的“吊装确实发生在TS中”取决于您的解释。我认为Quentin意味着用TS编写的代码仍然会表现出与用JS编写的代码相同的提升行为。这是正确的。我从另一个角度看它-TS是否提升了您的代码。在这种情况下,答案是“不”,因为引用昆廷的话: