上一章TypeScript教程请查看:TypeScript项目构建工具合集
从JavaScript迁移到TypeScript需要做以下事情:
- 对JavaScript有所了解。
- 了解项目中使用的模式和构建工具。
从上面的观点出发,我们将假设我们的目录是如下面的结构所设置的。在这里,我们将所有输出文件保存在一个名为“build”的输出目录中。
文章图片
我们可以使用以下过程从JavaScript迁移到TypeScript:
- 添加一个tsconfig.json文件到项目。
- 与构建工具集成。
- 将所有.js文件移动到.ts文件。
- 检查错误。
- sing第三方JavaScript库。
{
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5"
},
"include": [
"./src/**/*"
]
}
- 在上述文件中,我们指定打印稿几件事:
- 包括选择读取所有文件在src目录中。
- allowJs选项接受所有JavaScript文件作为输入。
- outDir指定,所有的输出文件应在建立文件夹重定向。
- target选项指定,所有JavaScript构造应该翻译成一个旧版本像ECMAScript 5。
注意:每个构建工具是不同的。
我们可以用webpack集成项目在以下方式:
a)在终端上运行以下命令:
$ npm install awesome-typescript-loader source-map-loader
在webpack集成中,我们使用awesome-typescript-loader(一种TypeScript加载器)与源代码映射加载器相结合,以便更容易地调试源代码。
b)在我们的webpack.config.js文件中合并模块配置属性,以包含以下加载器:
module.exports = {
entry: "./src/index.ts",
output: {
filename: "./dist/bundle.js",
},
// 启用sourcemaps来调试webpack的输出
devtool: "source-map",
resolve: {
// Add '.ts' and '.tsx' as resolvable extensions.
extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"]
},
module: {
loaders: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" }
],
preLoaders: [
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ test: /\.js$/, loader: "source-map-loader" }
]
},
// Other options...
};
3. 将所有.js文件移动到.ts文件在本节中,我们必须将.js文件重命名为.ts文件。类似地,如果我们的文件使用JSX,我们将需要将它重命名为.tsx。现在,如果我们在一个支持TypeScript的编辑器中打开这个文件,我们的一些代码可能会开始出现编译错误。因此,逐个转换文件可以更容易地处理编译错误。如果TypeScript在转换过程中发现任何编译错误,它仍然能够像Word打印文档一样翻译代码。
4. 检查错误将js文件移动到ts文件后,TypeScript会立即开始对代码进行类型检查。我们在JavaScript代码中得到诊断错误。我们可能会遇到以下一些错误:
a)我们可以使用any来抑制错误,例如:
在下面的代码中,我们可以使用类型断言来删除错误。
var foo = 123;
var bar = 'hey';
bar = foo;
// ERROR: cannot assign a number to a string
bar = foo as any//Ok
b)参数较少或较多的函数:
function display(name, age, height) {
let str1 = "Person named " + name + "," + age + " years old";
let str2 = (height !== undefined) ? (" and " + height +" feet tall") : '';
console.log(str1 + str2);
}
display( "AAA", 32);
在上面的代码中,函数display()接受三个参数:名称、年龄和身高。我们可以用两个值来调用这个函数:“AAA”和23。它在JavaScript中是完全有效的,因为在JavaScript中,如果一个函数缺少预期的参数,它会将未定义的值赋给该参数。
但是,TypeScript中的相同代码将给出编译错误: compilation error: Expected three arguments but got two。要删除这个错误,我们可以添加一个可选的参数符号到参数高度和注释我们的代码如下:
function display(name: string, age: number, height?: number) {
let str1: string = "Person named " + name + "," + age + " years old";
let str2: string = (height !== undefined) ? (" and " + height +" feet tall") : '';
console.log(str1 + str2);
}
c)顺序添加属性
以下代码在JavaScript中非常常见。
var options = {};
options.color = "red";
options.volume = 11;
在TypeScript中,{}这样的选项类型是空对象。所以,颜色和体积是不存在的,是不可赋值的。如果我们将声明移动到对象字面量本身,我们不会得到任何错误:
let options = {
color: "red",
volume: 11
};
我们还可以定义选项的类型,并在对象字面量上添加类型断言。
interface Options { color: string;
volume: number }let options = {} as Options;
options.color = "red";
options.volume = 11;
5. 使用第三方JavaScript库JavaScript项目使用第三方库,如jQuery或Lodash。为了编译文件,TypeScript需要知道这些库中所有对象的类型。我们知道,JavaScript库的TypeScript类型定义文件已经可以在DefinitelyTyped找到了。所以,我们不需要安装这种类型的外部。我们只需要安装那些在我们的项目中使用的类型。
例如
对于jQuery,安装定义:
$ npm install @types/jquery
对于Lodash,安装定义
$ npm install -S @types/lodash
【从JavaScript项目迁移到TypeScript项目 – TypeScript开发教程】一旦我们对JavaScript项目进行了更改,就运行构建工具。现在,我们应该将TypeScript项目编译成可以在浏览器中运行的纯JavaScript。
推荐阅读
- TypeScript项目构建工具合集 – TypeScript开发教程
- TypeScript环境声明 – TypeScript开发教程
- TypeScript鸭子类型(duck-typing) – TypeScript开发教程
- TypeScript日期对象 – TypeScript开发教程
- TypeScript装饰器用法详解 – TypeScript开发教程
- TypeScript使用泛型编程 – TypeScript开发教程
- TypeScript名称空间和模块的区别 – TypeScript开发教程
- TypeScript模块(内部模块和外部模块 – TypeScript开发教程)
- TypeScript使用名称空间 – TypeScript开发教程