首页 > 其他分享 >TypeScript实例_手动编译与自动编译、类型注解、接口和类的详解

TypeScript实例_手动编译与自动编译、类型注解、接口和类的详解

时间:2023-03-13 22:35:07浏览次数:31  
标签:TypeScript person lastName JavaScript js 编译 详解 fristName

一.认识TypeScript

image-20230311143055200

TypeScript 是一种由微软开发的开源、跨平台的编程语言。它是 JavaScript 的超集,最终会被编译为 JavaScript 代码。 2012 年 10 月,微软发布了首个公开版本的 TypeScript,2013 年 6 月 19 日,在经历了一个预览版之后微软正式发布了正式版 TypeScript TypeScript 的作者是安德斯·海尔斯伯格,C#的首席架构师。它是开源和跨平台的编程语言。 TypeScript 扩展了 JavaScript 的语法,所以任何现有的 JavaScript 程序可以运行在 TypeScript 环境中。 TypeScript 是为大型应用的开发而设计,并且可以编译为 JavaScript。 TypeScript 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6+的支持**,它由 Microsoft 开发,代码开源于 GitHub 上。

1.1 TypeScript特点

TypeScript 主要有 3 大特点:

  • 始于 JavaScript, 归于 JavaScript TypeScript 可以编译出纯净、简洁的 JavaScript 代码, 并且可以运行在任何浏览器上、Node.js 环境中和任何支持 ECMAScript 3(或更高版本) 的 JavaScript 引擎中。
  • 强大的类型系统 类型系统允许 JavaScript 开发者在开发 JavaScript 应用程序时使用高效的开发工具和常用操作比如静态检查和代码重构。
  • 先进的 JavaScript TypeScript 提供最新的和不断发展的 Java Scipt 特性, 包括那些来自 2015 年的 ECMAScript 和未来的提案中的特性, 比如异步功能和 Decorators, 以帮助建立健壮的组件。

1.2 安装TypeScript

安装typescript非常简单,只需要在cmd命令窗口敲下以下命令:(前提,本地已安装node.js)

npm install -g typescript

image-20230311144042337

使用命令,检测是否成功安装:(安装成功)

tsc -V

image-20230311144124977

1.3 TS代码实例(手动编译代码)

新建一个01_tsDemo.ts文件:

(() => {
    function hello1(str){
        return "你好" + str
    }

    let text = "上进小菜猪"
    console.log(hello1(text))
})()

在命令终端执行

tsc ./01_tsDemo.ts

执行完毕后会生成一个js代码:

image-20230312130256423

新建一个html代码:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="./01_tsDemo.js" ></script>
</body>
</html>

执行查看效果:

image-20230312130321974

1.3.1 总结

  • ts 的文件中如果直接书写 js 语法的代码,那么在 html 文件中直接引入 ts 文件,在谷歌的浏览器中是可以直接使用的
  • 如果 ts 文件中有了 ts 的语法代码,那么就需要把这个 ts 文件编译成 js 文件,在 htm1 文件中引入 js 的文件来使用
  • ts 文件中的函数中的形参,如果使用了某个类型进行修饰,那么最终在编译的 js 文件中是没有这个类型的
  • ts 文件中的变量使用的是 1et 进行修饰,编译的 js 文件中的修饰符就变成了 var 了

1.4 TS自动编译代码

  1. 新建一个文件夹:TS自动编译
  2. 进入文件夹的终端,输入:
tsc --init

image-20230312131358658

修改生成的json:

"outDir": "./js", 

作用:把 ts 文件最终编译后放在 js 的目录中。

"strict": false,

作用:不使用严格模式。

保存之后,按照下面步骤:

image-20230312132228048

image-20230312132244293

在ts里写下下面代码:

(()=>{
    function hello(str){
        return "hello"+str
    }
    let text = "上进小菜猪"
    console.log(hello(text))
}
)()

点击保存,会在js里自动编译为js文件。在html里引入js后查看效果无误。

1.5 类型注解

类型注解:是一种轻量级的为函数或者变量添加的约束

智能的提示信息:

(()=>{
    function hello(str:string){
        return "hello"+str
    }
    // let text = "上进小菜猪"
    let text =[10,20,30]
    console.log(hello(text))
}
)()

类似地,尝试除 greeter i调用的所有参数。下 ypeScript 会告诉你使用了非期望个数的参数调用了这函数。在这两种情况中,TypeScript 提供了静态的代码分析,它可以分析代码结构和提供的类型注解。要注意的是尽管有错误,greeter。js 文件还是被创建了。就算你的代码里有错误,你仍然可以使用 TypeScript。但在这种情况下,TypeScript 会警告你代码可能不会按预期执行。

1.6 接口的演示

interface:

interface是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来封装一定功能的集合。 它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。

接口演示TS文件:

(()=>{
    interface IPerson {
        fristName:String
        lastName:string
    }
    function showPullName(person:IPerson){
        return person.fristName+ "_" +person.lastName
    }
    const person = {
        fristName: "我是",
        lastName:"上进小菜猪"
    }
    console.log(showPullName(person))
}
)();

编译为的js文件如下:(对比查看)

(() => {
    function showPullName(person) {
        return person.fristName + "_" + person.lastName;
    }
    const person = {
        fristName: "我是",
        lastName: "上进小菜猪"
    };
    console.log(showPullName(person));
})();

运行结果如下:

image-20230312135415904

1.7 类的演示

TS类的演示依然使用上面的例子:

封装成员:

interface IPerson{
    fristName:String
    lastName:string
}

定义类:

class Person{
    fristName:String
    lastName:string
    fullName:string

    constructor (fristName:String,lastName:string){
        this.fristName=fristName
        this.lastName=lastName
        this.fullName=this.fristName+"_"+this.lastName
    }
}

构造器函数:

 constructor (fristName:String,lastName:string){
        this.fristName=fristName
        this.lastName=lastName
        this.fullName=this.fristName+"_"+this.lastName
    }

定义函数:

function showname(person:IPerson){
    return person.fristName+"_"+person.lastName
}

实例化对象:

const person = new Person("上进","小菜猪")
console.log(showname(person))

编译产生的JS代码如下:

(() => {
    class Person {
        constructor(fristName, lastName) {
            this.fristName = fristName;
            this.lastName = lastName;
            this.fullName = this.fristName + "_" + this.lastName;
        }
    }
    function showname(person) {
        return person.fristName + "_" + person.lastName;
    }
    const person = new Person("上进", "小菜猪");
    console.log(showname(person));
})();

标签:TypeScript,person,lastName,JavaScript,js,编译,详解,fristName
From: https://blog.51cto.com/u_15568258/6116360

相关文章

  • QoS详解
    概念QoS(QualityofService,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术......
  • Redis的缓存一致性问题详解
    1、三种常用的缓存模式1.旁路缓存模式一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求“缓存+数据库”必须保持一致性的......
  • 【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现
    简介建造者模式(BuilderPattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对......
  • K8S中HPA详解
    一、HPA解决的问题HPA全称是HorizontalPodAutoscaler,也就是对k8s的workload的副本数进行自动水平扩缩容(scale)机制,也是k8s里使用需求最广泛的一种Autoscaler机制,在开始......
  • 编译Invalid GBK character "\xE5" on line 2
    编译.scss文件报错InvalidGBKcharacter"\xE5"online2解决方法:在.scss文件里面首行加上@charset"utf-8";---main---@import"my.scss";......
  • 16.MySQL数据库之mysql-5.7 show engine innodb status 详解,常用的地方一、死锁分析 
     一、show engine innodb status 简介:show engine innodb status 是mysql提供的一个用于查看innodb引擎时间信息的工具,就目前来说有两处比较常用的地......
  • [React][typescript]官方教程小游戏Tic-Tac-Toe
    本文记录一些跟随官方教程后的心得,按照最终版本代码逐块进行理解,包括typescript和react的一些基本操作和误区函数组件Game:最后输出的大组件,所有组件的父类Board:Game......
  • 031nslookup详解
    一、利用nslookup查询txt等类型❯nslookup>settype=txt>taicharge.comServer: 219.141.136.10Address: 219.141.136.10#53Non-authoritativeanswer:taicha......
  • uniapp开发使用slot插槽时小程序编译报错:Errors compiling template:目前仅支持解构插
    1.子组件中 <view><slot:user="user">{{user.lastName}}</slot></view>2.在父组件使用<templatev-slot:default="otherSlotProps"......
  • 详解AQS的7个同步组件
    摘要:AQS的全称为AbstractQueuedSynchronizer,是在J.U.C(java.util.concurrent)下子包中的类。本文分享自华为云社区《【高并发】AQS案例详解》,作者:冰河。AQS的全称为Abs......