gpt4 book ai didi

javascript - TypeScript 与 ES6 (ECMAScript 2015) 的兼容性如何(将如何)

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:01 32 4
gpt4 key购买 nike

我认为 TypeScript(基本上)是带有附加类型注释的 ECMAScript 6(又名 2015)。

我的 TypeScript 编译器 (1.6.2) 提示以下代码:

if (calc.distance > Number.EPSILON) {
...
}

error TS2339: Property 'EPSILON' does not exist on type 'NumberConstructor'.

打字有问题还是 TypeScript 不是(还)真的是 ES6 的超集?

我还没有尝试过诸如 MapWeakMap、Promises、Generators 等尖端技术……

TypeScript 是稍微落后于 ES6 还是在朝另一个方向发展?我应该通过 Babel 运行 TypeScript 编译器输出吗?

刚开始使用 TypeScript,我不想背错了马。

最佳答案

为什么目标 ES3 和 ES5 不存在 Number.EPSILON

I thought TypeScript is (basically) ECMAScript 6 (aka. 2015) with additional type annotations.

TypeScript 是带有附加注释的 ECMAScript。 ES6 中的一些特性,如类、剩余参数、lambda、for oflet,在 ES5 或 ES3 中有一个干净的等效代码,编译器可以生成一些代码这些目标。但是新的 API 需要填充,并且编译器不会添加任何运行时库(与 Babel 或 Traceur 不同)。

您的代码使用目标 ES6 编译。

对于目标 ES3 和 ES5,您必须:1/加载一个 polyfill (like this one) 和 2/添加 TypeScript 编译器的定义。

查找 ES6 API 的 TypeScript 定义

因此,您需要找到定义。这是查找 ES6 API 定义的提示。

ES6 API 的所有定义都已在编译器中定义。我们可以使用它们。在您的节点目录中,打开文件 lib/node_modules/typescript/lib/lib.es6.d.ts。然后,搜索 EPSILON。您会找到一个接口(interface) NumberConstructor。下面是它的代码(TS 1.6.2):

interface NumberConstructor {
/**
* The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1
* that is representable as a Number value, which is approximately:
* 2.2204460492503130808472633361816 x 10‍−‍16.
*/
EPSILON: number;

/**
* Returns true if passed value is finite.
* Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a
* number. Only finite values of the type number, result in true.
* @param number A numeric value.
*/
isFinite(number: number): boolean;

/**
* Returns true if the value passed is an integer, false otherwise.
* @param number A numeric value.
*/
isInteger(number: number): boolean;

/**
* Returns a Boolean value that indicates whether a value is the reserved value NaN (not a
* number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter
* to a number. Only values of the type number, that are also NaN, result in true.
* @param number A numeric value.
*/
isNaN(number: number): boolean;

/**
* Returns true if the value passed is a safe integer.
* @param number A numeric value.
*/
isSafeInteger(number: number): boolean;

/**
* The value of the largest integer n such that n and n + 1 are both exactly representable as
* a Number value.
* The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1.
*/
MAX_SAFE_INTEGER: number;

/**
* The value of the smallest integer n such that n and n − 1 are both exactly representable as
* a Number value.
* The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)).
*/
MIN_SAFE_INTEGER: number;

/**
* Converts a string to a floating-point number.
* @param string A string that contains a floating-point number.
*/
parseFloat(string: string): number;

/**
* Converts A string to an integer.
* @param s A string to convert into a number.
* @param radix A value between 2 and 36 that specifies the base of the number in numString.
* If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.
* All other strings are considered decimal.
*/
parseInt(string: string, radix?: number): number;
}

只需将此代码添加到您的项目中即可。

关于javascript - TypeScript 与 ES6 (ECMAScript 2015) 的兼容性如何(将如何),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967380/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com