TypeScript的30个小问答(上)

简介: TypeScript的30个小问答(上)

1、 TypeScript 的主要特点是什么?


  • 跨平台:TypeScript 编译器可以安装在任何操作系统上,包括 Windows、macOS 和 Linux。
  • ES6 特性:TypeScript 包含计划中的 ECMAScript 2015 (ES6) 的大部分特性,例如箭头函数。
  • 面向对象的语言:TypeScript 提供所有标准的 OOP 功能,如类、接口和模块。
  • 静态类型检查:TypeScript 使用静态类型并帮助在编译时进行类型检查。因此,你可以在编写代码时发现编译时错误,而无需运行脚本。
  • 可选的静态类型:如果你习惯了 JavaScript 的动态类型,TypeScript 还允许可选的静态类型。
  • DOM 操作:您可以使用 TypeScript 来操作 DOM 以添加或删除客户端网页元素。


2、使用 TypeScript 有什么好处?


  • TypeScript 更具表现力,这意味着它的语法混乱更少。
  • 由于高级调试器专注于在编译时之前捕获逻辑错误,因此调试很容易。
  • 静态类型使 TypeScript 比 JavaScript 的动态类型更易于阅读和结构化。
  • 由于通用的转译,它可以跨平台使用,在客户端和服务器端项目中。


3、TypeScript 的内置数据类型有哪些?


  • 数字类型:用于表示数字类型的值。TypeScript 中的所有数字都存储为浮点值。


const m:number = value
复制代码


  • 布尔类型:一个逻辑二进制开关,包含true或false


const m:bool = Boolean value
复制代码


  • Null 类型:Null 表示值未定义的变量。


const m:string = ""
复制代码


  • 未定义类型:一个未定义的字面量,它是所有变量的起点。


const m:string = null
复制代码


  • void 类型:分配给没有返回值的方法的类型。


const m:void = undefined
复制代码



4、TypeScript 目前的稳定版本是什么?


当前的稳定版本是 4.2.3。


5、TypeScript 中的接口是什么?


接口为使用该接口的对象定义契约或结构。接口是用关键字定义的interface,它可以包含使用函数或箭头函数的属性和方法声明。


interface IEmployee {
    empCode: number
    empName: string
    getSalary: (number) => number // arrow function
    getManagerName(number): string
}
复制代码


6、TypeScript 中的模块是什么?


TypeScript 中的模块是相关变量、函数、类和接口的集合。你可以将模块视为包含执行任务所需的一切的容器。可以导入模块以轻松地在项目之间共享代码。


module fn{
    class onFn{
        export sum(x, y){
            return x + y
        }
    }
}
复制代码


7、后端如何使用TypeScript?


你可以将 Node.js 与 TypeScript 结合使用,将 TypeScript 的优势带入后端工作。只需输入以下命令,即可将 TypeScript 编译器安装到你的 Node.js 中:


npm i -g typescript
// 或者
yarn add typescript -g
复制代码


8、TypeScript 中的类型断言是什么?


TypeScript 中的类型断言的工作方式类似于其他语言中的类型转换,但没有 C# 和 Java 等语言中可能的类型检查或数据重组。类型断言对运行时没有影响,仅由编译器使用。类型断言本质上是类型转换的软版本,它建议编译器将变量视为某种类型,但如果它处于不同的形式,则不会强制它进入该模型。


9、如何在 TypeScript 中创建变量?


你可以通过三种方式创建变量:var,let,和const。

  • var是严格范围变量的旧风格。你应该尽可能避免使用,var因为它会在较大的项目中导致问题。


var m:number = 1
复制代码


  • let是在 TypeScript 中声明变量的默认方式。与var相比,let减少了编译时错误的数量并提高了代码的可读性。


let m:number = 1
复制代码


  • const创建一个其值不能改变的常量变量。它使用相同的范围规则,let并有助于降低整体程序的复杂性。


const m:number = 100
复制代码


10、在TypeScript中如何从子类调用基类构造函数?


你可以使用该super()函数来调用基类的构造函数。


class Animal {
  name: string;
  constructor(name: string) {
    this.name = name
  }
  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`)
  }
}
class Snake extends Animal {
  constructor(name: string) {
    super(name)
  }
  move(distanceInMeters = 5) {
    console.log("Slithering...")
    super.move(distanceInMeters)
  }
}
复制代码


11、解释如何使用 TypeScript mixin。


Mixin 本质上是在相反方向上工作的继承。Mixins 允许你通过组合以前类中更简单的部分类设置来构建新类。相反,类A继承类B来获得它的功能,类B从类A需要返回一个新类的附加功能。


12、TypeScript 中如何检查 null 和 undefined?


你可以使用 juggle-check,它检查 null 和 undefined,或者使用 strict-check,它返回true设置为null的值,并且不会评估true未定义的变量。


//juggle
if (x == null) {
    //
}
// --------------------
var a: number
var b: number = null
function strictCheck(x, name) {
    if (x == null) console.log(name + ' == null')
    if (x === null) console.log(name + ' === null')
    if (typeof x === 'undefined') console.log(name + ' is undefined')
}  
strictCheck(a, 'a')
strictCheck(b, 'b')
复制代码


13、TypeScript 中的 getter/setter 是什么?你如何使用它们?


Getter 和 setter 是特殊类型的方法,可帮助你根据程序的需要委派对私有变量的不同级别的访问。Getters 允许你引用一个值但不能编辑它。Setter 允许你更改变量的值,但不能查看其当前值。这些对于实现封装是必不可少的。例如,新雇主可能能够了解get公司的员工人数,但无权set了解员工人数。


const fullNameMaxLength = 10
class Employee {
  private _fullName: string = ""
  get fullName(): string {
    return this._fullName
  }
  set fullName(newName: string) {
    if (newName && newName.length > fullNameMaxLength) {
      throw new Error("fullName has a max length of " + fullNameMaxLength)
    }
    this._fullName = newName
  }
}
let employee = new Employee()
employee.fullName = "Bob Smith"
if (employee.fullName) {
  console.log(employee.fullName)
}
复制代码


14、 如何允许模块外定义的类可以访问?


你可以使用export关键字打开模块以供在模块外使用。


module Admin {
  // use the export keyword in TypeScript to access the class outside
  export class Employee {
    constructor(name: string, email: string) { }
  }
  let alex = new Employee('alex', 'alex@gmail.com');
}
// The Admin variable will allow you to access the Employee class outside the module with the help of the export keyword in TypeScript
let nick = new Admin.Employee('nick', 'nick@yahoo.com')
复制代码


15、如何使用 Typescript 将字符串转换为数字?


与 JavaScript 类似,你可以使用parseInt或parseFloat函数分别将字符串转换为整数或浮点数。你还可以使用一元运算符+将字符串转换为最合适的数字类型,“3”成为整数,3而“3.14”成为浮点数3.14。


const x = "32"
const y: number = +x
复制代码


相关文章
从rtsp视频流中截取图片
从rtsp视频流中截取图片
2071 0
|
Java Maven
springboot项目--freemarker使用ftl模板文件动态生成图片
springboot项目--freemarker使用ftl模板文件动态生成图片
1424 0
|
3月前
|
人工智能 自然语言处理 JavaScript
【开源项目】MaxKB4J基于java开发的工作流和 RAG智能体的知识库问答系统
MaxKB4J是一款基于Java开发的开源LLM工作流应用与RAG知识库问答系统,结合MaxKB和FastGPT优势,支持智能客服、企业知识库等场景。它开箱即用,可直接上传/爬取文档,支持多种大模型(如Qwen、通义千问等),具备灵活的工作流编排能力,并无缝嵌入第三方系统。技术栈包括Vue.js、Springboot3、PostgreSQL等,提供稳定高效的智能问答解决方案。访问地址:`http://localhost:8080/ui/login`,项目详情见[Gitee](https://gitee.com/taisan/MaxKB4j)。
|
4月前
|
人工智能 Java 程序员
JManus - 面向 Java 开发者的开源通用智能体
JManus 是一个以 Java 为核心、完全开源的 OpenManus 实现,隶属于 Spring AI Alibaba 项目。它旨在让 Java 程序员更便捷地使用 AI 技术,支持多 Agent 框架、网页配置 Agent、MCP 协议和 PLAN-ACT 模式。项目在 GitHub 上已获近 3k star,可集成多个大模型如 Claude 3.5 和 Qwen3。开发者可通过 IDE 或 Maven 快速运行项目,体验智能问答与工具调用功能。欢迎参与开源共建,推动通用 AI Agent 框架发展。
7829 64
|
7月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
2163 2
|
10月前
|
小程序 前端开发 算法
|
9月前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
7453 2
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
|
10月前
|
Java Windows
IDEA不使用lombok,如何快速生成get和set方法
【11月更文挑战第10天】在 IntelliJ IDEA 中生成 `get` 和 `set` 方法有多种方式:通过菜单操作、使用快捷键或自定义模板。菜单操作包括选择“Code”菜单中的“Generate...”,快捷键为“Alt + Insert”。自定义模板可在“File”->“Settings”->“Editor”->“Code Style”->“Java”中设置。批量生成时,可多选变量一次性生成。
1841 2
|
消息中间件 存储 Java
如何在Java中实现消息队列?
如何在Java中实现消息队列?