TyScript学习笔记一

目录

前言:

类型声明

ts的类型

字面量类型

any类型

unknown类型及类型断言:

void类型

never类型

object类型

数组类型

元组类型

枚举类型

|的用法

&的用法

类型的别名

ts编译选项

使用webpack打包ts代码

1  npm init -y生成package.json

2 编写配置文件

3 配置tsconfig.json文件

4 package.json添加build命令

安装webpack插件

自动生成js文件插件

内置服务器插件

文件清除插件

有关模块的设置

兼容性插件

完整代码

webpackage.config.js

tsconfig.json

package.json

总结


前言:

对typescript的类型声明以及各种基本类型,webpack的下载安装及配置进行了学习。

类型声明

类型声明是TyScript最重要的一个特点。TyScript区别于JavaScript的一个显著特点就是tyscript对变量类型进行了声明。

通过类型声明可以指定ts中变量的类型。

指定之后,当对变量赋值时,ts会自动检测赋值是否符合该类型。符合则赋值,不符合就报错。

语法:

let 变量:类型;

let 变量(:类型)=值;

function fn(参数:类型,参数:类型):类型{

}

注:由于ts有自动的类型判断机制,当变量的声明和赋值同时进行时,ts编译器会自动检测变量类型,所以类型声明可以省略

//声明一个变量a,同时指定它的类型为number
let a:number;

//a的类型设置为number,在以后的使用过程中a的值只能是数字
a=10;
a=22;
//a="hello"; 会报错,因为变量a的类型时number 不能赋值字符串,但执行的话也可以编译成功
let b:string;

//声明完变量就直接进行赋值
let c:boolean=false;

//如果变量的声明和赋值是同时进行,ts可以自动对变量进行类型检测
let c=false;
//js的函数时不考虑参数的类型和个数的
// function sum(a,b){
//     return a+b;
// }
// console.log(sum(123,456));

//最后一个number表返回值类型 返回的返回值类型不符合也会报错
function sum2(a:number,b:number):number
{
    return a+b;
}
console.log(sum2(123,456));
//console.log(sum2(123,"456"));//报错,因为"456"是字符串不符合形参的类型
//console.log(sum2(123));//webstrom会报错,不知道VSCOde为什么不报错

注:若vscode会有无法重新声明变量块的报错,在终端中输入tsc --init重新配置config.json文件即可。

ts的类型

字面量类型

//可以直接使用字面量进行类型声明
let a:10;
a=10;
//a=11;//报错

any类型

//any表示任意类型,一个变量设置类型为any后相当于对该变量关闭了ts的类型检测
//使用ts时,不建议使用any类型
//let d:any;
//声明变量如果不指定类型,则ts解析会自动判断变量的类型为any(隐式的any)
//隐式any若后面赋值了,vscode的ts会自动检测并认为该变量为所检测的值类型(最后一个)
let d;
d=10;
d=true;
d="hello";

let s:string;
s=d;//此时vscode程序不报错,因为d最后赋值是为hello(字符串类型);若赋值为Boolean或number类型则会报错。

unknown类型及类型断言:

/unknown表示未知类型的值
let e:unknown;
e=10;
e="hello";

//unknown 实际上是一个类型安全的any,不能直接赋值给其他变量
//s=e;报错不能将unknown类型赋值给string
if(typeof e==="string"){
    s=e;
}

//类型断言 可以用来告诉解析器的变量的实际类型
/*
语法:
    变量 as 类型
    <类型>变量
*/
s=e as string;
s=<string>e;

void类型

//void用来表示空,以函数为例,就表示没有返回值的函数
function fn(){
    //返回void
}

function fn2(){
    return true;//返回boolean
}

never类型

//never:表示永远不会返回结果
function fn3(): never{
    throw new Error("报错了!");
}

注:throw代表抛出异常。

object类型

//object表示一个js对象
let a2:object;
a2={};
a2=function(){};


//{}用来指定对象中可以包含哪些属性
//语法:{属性名:属性值,属性名:属性值},不能多也不能少 可加?表示可选
let b2:{name:string,age?:number};

//b2={};//报错 因为没有包含name属性
b2={name:"孙悟空"};
b2={name:"孙悟空",age:20};

//[propName:string]:any 表示任意类型的属性
let c2:{name:string,[propName:string]:any};
c2={name:"猪八戒",age:18,gender:"男"};


//设置函数结构的类型声明
//语法:(形参:类型,形参:类型...)=>返回值
let d2:(a:number,b:number)=>number;
d2=function(n1,n2){
    return n1+n2;
}

数组类型

/*
    数组的类型声明:
        类型[]
        Array<类型>
*/
//string[] 表示字符串数组
let e2:string[];
e2=["a","b"];

//number[] 表示数值数组
let f2:number[];

let g2:Array<number>;
g2=[1,3,4,5];

元组类型

​
/*
    元组:元组就是固定长度的数组
        语法:[类型,类型,类型]
*/
let h:[string,string];
h=["hello","abc"];
//h=["hello","abc","123"];//报错
//h=["hello"];//报错
​

枚举类型

*
    enum枚举
*/
enum Gender{
    Male=1,
    female=0
}
let i:{name:string,gender:Gender};
i={
    name:"孙悟空",
    gender:Gender.Male
}

console.log(i.gender===Gender.Male)

|的用法

//可以使用|来连接多个类型  |表示联合类型
let b:"male"|"female";
b="male";
b="female";

let c:boolean | string;
c=true;
c="hello";

&的用法

//&表示同时
let j:{name:string}&{age:number};

类型的别名

//类型的别名
type myType=string;
type myType2=1|2|3|4|5;
let k:myType2;
let l:1|2|3|4|5;
let m:myType;

ts编译选项

tsc 要执行的文件 表示编译文件

tsc 要执行的文件名 -w 表示ts编辑器可以监视文件,即每隔一定时间ts编辑器检查文件,若文件内容有变化就编译更新,但只能编译选定的文件。

在一个文件夹下存放有tsconfig.json文件,则该文件夹下所有文件都被监视,后输入tsc即可全部编译。tsc --init即可创建tsconfig.json

{
  //tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
  /*
  "include"用来指定哪些ts文件需要被编译
  **表任意目录 *表任意文件
  "include":[
    "./src/ ** /*"   
  ]
  "exclude"不需要被编译的文件目录
  默认值:["node_modeles,"bower_components","jspm_packages"]
  "exclude":[
    
  ]
  "extends"定义被继承的配置文件
  "extends":"./src/base"当前配置文件会自动包含src目录下base.json中的所有配置信息
  "files"指定被编译文件的列表,只有需要编译的文件较少时才会用到
  "files":[
    指定的文件
  ]
}
{
    /*
   "compilerOptions 编译器的选项"
   "compilerOptions"{
    //target 用来指定ts被编译的es的版本 es3,4,5,6 es2015,16,17,18,19,20 esnext
    "target":"esnext",

    //module指定要使用的模块化规范
    //"none" "commonjs "amd "system" "umd" "es6" "es2015" "es2020" "esnext"推荐用es6
    "module":"commonjs",

    //lib 用来指定项目中要使用的项目 一般不需要设置
    //上述均可传错误的值来查看可选值
    "lib":["dom","es6"]

    //outDir用来指定编译后文件所在的目录
    "outDir":"./dist",

    //outFile将代码合并为一个文件
    //设置outFile后,所有的全局作用域中的代码会合并到同一个文件中,如果是由模块的化,需要将module设置为system
    "outFile":"./dist/app.js"

    //allowJs是否对js文件进行编译,默认是false
    "allowJs":false

    //checkJs是否检查js的语法是否符合规范,默认是false
    "checkJs":false
    
    //removeComments编译的js文件是否移除注释
    "removeComments":true

    //noEmit不生成编译后的文件,一般用来检查
    "noEmit":true

    //noEmitOnError当有错误时不生成编译后的文件
    "noEmitOnError":true

    //strict严格检查的总开关,一般设置为true
    "strict":true
    
    //alwaysStrict用来设置编译后的文件是否使用严格模式,默认为false
    //若有导入引出模块时,默认编译后是有严格模式的
    "alwaysStrict":false

    //noImplicitAny不允许隐式的any
    "noImplicitAny":false

    //noImplicitThis不允许不明确类型的this
    "noImplicitThis":false

    //strictNullChecks严格的检查总值
    "strictNullChecks":true
    */
  }

使用webpack打包ts代码

1  npm init -y生成package.json

npm i -D webpack webpack-cli typescript ts-loadercnpm i -D webpack webpack-cli typescript ts-loader安装四个依赖包

依赖包安装成功图 

同时生成这个文件

2 编写配置文件

webpack.config.js文件中编写

//引入一个包
const path=require("path");

//webpack中的所有的配置信息都应该写在module.exports中
module.exports={
    //指定入口文件
    entry:"./src/index.ts",

    //指定打包文件所在的目录
    output:{
        //指定打包文件的目录
        path:path.resolve(__dirname,"dist"),
        //打包后文件的文件
        filename:"bundle.js"
    },

    //指定webpack打包时要使用的模块
    module:{
        //指定要加载的规则
        rules:[
            {
                //test指定规则生效的文件
                test:/\.ts$/,
                //要使用的loader
                use:'ts-loader',
                //要排除的文件
                exclude:/node_modules/
            }
        ]
    }
}

3 配置tsconfig.json文件

{
  "compilerOptions": {
    "module": "es2015",
    "target": "es2015",
    "strict": true
  }
}

4 package.json添加build命令

配置完成,使用npm run build命令即可打包

 注:使用vscode在webpack后面需要加上--mode development。不加虽然也能编译成功,但是会有警告

成功使用webpack打包示意图

 

安装webpack插件

自动生成js文件插件

npm i -D html-webpack-plugin

cnpm i -D html-webpack-plugin

下载成功后在package.json中显示

 在webpack.json.js文件中引入插件

 

重新编译后生成html和js文件

内置服务器插件

npm i -D webpack-dev-server

cnpm i -D webpack-dev-server

package.json中配置服务器启动命令(可设置所要打开的浏览器也可不设置,即open后不加浏览器,不设置打开的是默认的浏览器)

注:vscode后面还要加--mode development 不然会有警告

在终端中输入npm start启动

成功示意图

运行成功后会自动打开网页

文件清除插件

清除的是旧文件,会用新的编译文件替换

npm i -D clean-webpack-plugin

cnpm i -D clean-webpack-plugin

下载成功后在package.json中显示

webpack.json.js文件中引入插件

有关模块的设置

引用模块要在webpackage.config.json中配置

兼容性插件

解决浏览器兼容性问题

npm i -D @babel/core @babel/preset-env babel-loader core-js

cnpm i -D @babel/core @babel/preset-env babel-loader core-js

下载成功后在package.json中显示

webpack.json.js文件中配置

完整代码

webpackage.config.js

//引入一个包
const path=require("path");
//引入html插件
const HTMLWebpackPlugin=require('html-webpack-plugin');
//引入clean插件
const {CleanWebpackPlugin}=require('clean-webpack-plugin');
const { resolve } = require("path");

//webpack中的所有的配置信息都应该写在module.exports中
module.exports={
    //指定入口文件
    entry:"./src/index.ts",

    //指定打包文件所在的目录
    output:{
        //指定打包文件的目录
        path:path.resolve(__dirname,"dist"),
        //打包后文件的文件
        filename:"bundle.js",

        //告诉webpack不使用箭头函数
        environment:{
            arrowFunction:false
        }
    },

    //指定webpack打包时要使用的模块
    module:{
        //指定要加载的规则
        rules:[
            {
                //test指定规则生效的文件
                test:/\.ts$/,
                //要使用的loader
                use:[
                    //配置babel
                    {
                        //指定加载器
                        loader:'babel-loader',
                        //设置babel
                        options:{
                            //设置预定义的环境
                            presets:[
                                [
                                    //指定环境的插件
                                    "@babel/preset-env",
                                    //配置信息
                                    {
                                        //要兼容的目标浏览器
                                        targets:{
                                            "edge":"106",
                                            "ie":"11",
                                            "chrome":"99"
                                        },
                                        //指定corejs的版本
                                        "corejs":"3",
                                        //使用corejs的方式 "usage"表示按需加载
                                        "useBuiltIns":"usage"
                                    }
                                ]
                            ]
                        }
                    },
                    'ts-loader',
                ],
                //要排除的文件
                exclude:/node_modules/
            }
        ]
    },
    //配置webpack插件
    plugins:[
        new CleanWebpackPlugin(),
        new HTMLWebpackPlugin({
            //title:"这是一个自定义的title"
            template:"./src/index.html"//以他作为模板生成js文件
        }),
    ],

    //用来设置引用的模块
    resolve:{
        extensions:['.ts','.js']//以.ts ,.js结尾的文件都可以作为模块来使用
    }
}

tsconfig.json

{
  "compilerOptions": {
    "module": "es2015",
    "target": "es2015",
    "strict": true
  }
}

package.json

{
  "name": "part3",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --mode development",
    "start": "webpack serve --open --mode development "
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.19.3",
    "@babel/preset-env": "^7.19.4",
    "babel-loader": "^8.2.5",
    "clean-webpack-plugin": "^4.0.0",
    "core-js": "^3.25.5",
    "html-webpack-plugin": "^5.5.0",
    "ts-loader": "^9.4.1",
    "typescript": "^4.8.4",
    "webpack": "^5.74.0",
    "webpack-cli": "^4.10.0",
    "webpack-dev-server": "^4.11.1"
  }
}

总结

学习了类型声明及各种类型以及webpack。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值