Nir*_*ana 15 javascript types typescript
在 TypeScript 中,有两种不同的“数字”类型。第一个称为小写number,第二个称为大写Number。如果您尝试打印number,则会出现编译器错误:
console.log(number); //-> error TS2693: 'number' only refers to a type
Run Code Online (Sandbox Code Playgroud)
另一方面,打印Number会给出标准的功能描述:
console.log(Number); //-> [Function: Number]
Run Code Online (Sandbox Code Playgroud)
这并不奇怪,因为这里Number记录的只是一个内置的 JS 构造函数。然而,目前还不清楚,应该是什么。number
从错误消息来看,似乎number实际上并不是像 那样的离散值(?!)Number。但尽管如此,它还是在变量和函数声明中使用,就像它是一个值一样,例如:
var two: number = 2;
function sqr(x: number) { return x; }
Run Code Online (Sandbox Code Playgroud)
另一方面,用户定义的类型(例如类)似乎是离散值(因为它们还打印标准函数描述)。而且,为了使事情变得更加复杂,Number可以在类似于以下的注释中使用number:
var two: Number = 2;
Run Code Online (Sandbox Code Playgroud)
string和String、any、Object等也有类似的情况。
所以,我的问题是: TypeScript 中的、等是什么,它们与内置构造函数有何不同?numberstring
Cer*_*nce 17
number只是一个 TypeScript 的东西 - 它是一个原始类型,指的是数字。
但是,从错误消息来看,数字实际上并不是像 Number 这样的离散值。
事实上 - 它是一种类型,因此它不存在于发出的代码中。
离散值,例如 Number。另一方面,用户定义的类型(例如类)似乎是离散值(因为它们还打印标准函数描述)。
是的。Number 为一的类是特殊的。他们做了两件事,但有些不直观:
如果你在需要类型的Number地方使用,TypeScript 不会抱怨,因为它是一个接口。Number
如果您在需要值Number(发出的代码中存在的东西)的地方使用,TypeScript 不会抱怨,因为它也是一个全局构造函数。Number
换句话说,Number下面的两个指的是完全不同的东西:
// refer to the TypeScript Number interface
let foo: Number;
// refer to the JavaScript global.Number constructor
const someNum = Number(someString);
Run Code Online (Sandbox Code Playgroud)
在 TypeScript 中使用 Number 非常奇怪,因为严格来说,它引用的是通过以下方式创建的数字new:
const theNum = new Number(6);
Run Code Online (Sandbox Code Playgroud)
几乎没有理由这样做。请改用普通的原始数字,而不使用对象包装器。
const theNum = 6;
// theNum is typed as `number`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13720 次 |
| 最近记录: |