我是Angular2的新手,到目前为止我很享受,但有一个问题:打字.我无法弄清楚如何使用它们以及它们到底是什么.有些地方说使用打字,其他人说使用npm来安装定义.
我糊涂了!!
JavaScript是无类型的,这意味着我们可以传递并使用没有约束的数据,对象和函数.我们可以编写调用对象上不存在的方法的代码,或者引用我们没有的引用变量.在编写代码时,很难发现这些错误,并且可能导致代码不稳定和错误.对代码进行大的更改会变得困难和冒险,因为您不会立即看到某些更改是否与其他地方的代码冲突.
TypeScript主要是关于向JavaScript 添加类型.这意味着TypeScript要求您准确描述对象和数据的格式.当您这样做时,这意味着编译器可以调查您的代码并发现错误.它可以看到您尝试使用错误类型的参数调用函数,或者引用当前作用域中不可访问的变量.
当您自己编写TypeScript时,这种代码的正式描述是代码本身的一部分.
但是,当您使用jQuery或moment.js等外部库时,该代码中没有类型的信息.因此,为了将它与TypeScript一起使用,您还必须获取描述该代码类型的文件.这些是类型声明文件,通常带有文件扩展名.d.ts
.幸运的是,人们已经为大多数常见的javascript库编写了那种类型的声明文件.
打字只是安装这些文件的工具.现在最好的做法就是使用npm.
当您安装这些文件时,基本上只意味着下载它们并将它们放入项目中,TypeScript编译器将理解*外部代码,您将能够使用这些库.否则你到处都会遇到错误.
*根据您设置项目和配置项目的方式,您可能必须配置typescript以专门查找这些文件,或者它可能只是在您没有任何配置的情况下工作.
什么是打字?
简而言之,TypeScript为JavaScript添加了静态类型.由于JavaScript本身并未定义此类型定义,因此必须通过其他机制将它们编写并包含在TypeScript编译过程中.换句话说,JavaScript库可以定义一个函数:
export function createPerson(name, age, initScore) { ... }
但是在TypeScript的静态类型环境中,对于开发人员来说,有这样的东西会更有用:
interface Person {
name: string,
age: number,
score: number
}
export function createPerson(name: string, age: number, initScore?: number): Person;
的目的的类型声明,通常被称为分型,类型定义或只是类型,是在这些细节上实现填充,从而识别甚至跨越库API误用.它们通常驻留在具有.d.ts
扩展名的文件中,并且可以.ts
使用编译器从文件构建.但是,当程序不是用TypeScript编写时,这些声明通常是手动编写的.
有了这样说,你的困惑是有道理的:随着时间的推移,不止一种方法来安装和管理TypeScript声明.然而,现在有一个官方(因此推荐)安装和使用声明文件的方法,它在此处记录:
在TypeScript 2.0中,在获取,使用和查找声明文件时,它变得非常容易.这个页面详细说明了如何做到这三点
[...]
在TypeScript 2.0及更高版本中获取类型声明不需要除npm之外的任何工具.
例如,检索Angular的声明就像在项目中安装此依赖项一样简单:
npm install --save @types/angular
@types
编译器将自动考虑命名空间中的包以检索类型声明.此外,如果这些声明已经嵌入到npm包中,除了安装该包之外,您不必执行任何其他操作(此类包的示例是redux).有关更多信息,请参阅tsconfig.json上的文档.还有一个关于创建自己的声明文件的部分,这是所有希望向自己的库添加类型声明的开发人员的推荐读物.