// Js八种内置类型, string, number, boolean, undefined, null, object, bigint symbol
// ECMAScript内置对象 Array, Date Error
// DOM和BOM   HTMLElement, MoserEvent
// 工具类Partial,可以把定义的属性变成可选的,当然age?: number也可以解决
interface IStudent {
address: string
age: number
}
// 正常
const Tom:IStudent = {
address: '湖北',
age: 19
}
// 报错
const Jack:IStudent = {
address: '湖北'
}
// 解决
type OptionIStudent = Partial<IStudent> const Jack1:OptionIStudent = {
address: '湖北'
} // Partial底层实现
type Partial<T> = {
[P in keyof T]?: T[P]
}
// 描述函数类型
interface Isum {
(x: number, y: number): number
} const add:Isum = (num1, num2) => {
return num1 + num2
} add(2,3)
implements 实现的意思,主要用来给class定义约束

interface MusicInterface {
pay():void
} // phone类如果没有pay方法会报错
class phone implements MusicInterface {
pay() {}
}

// 这样phone就可以有两条约束了
class phone implements MusicInterface, CallInterface {
    pay() {}
    makePhone() { }
}
// 枚举,特点: 数字递增,反向映射
enum Direction {
Up,
Down,
Left,
Right
}
// 数字递增
console.log(Direction.Up); // 0
console.log(Direction.Down); // 1 // 反向映射
console.log(Direction[0]); // Up // 当然也可以自己定义递增的初始值
enum Direction1 {
Up = 2,
Down,
Left,
Right
}
console.log(Direction.Down); // 3 // 当然也可以定义字符串枚举
enum Direction2 {
Up = 'UP',
Down = 'DOWN'
}
// Ts高级类型
// | 指可以是其中一种类型 & 把类型合并成一个新的类型
// 联合类型
let num: number | string // 交叉类型
interface Student {
name: string
}
type Person = Student & { age:number } let alan: Person = {
name: 'alan',
age: 18
}
// 定义类型可以用type 和 interface
// 相同点是: 都可以定义对象或者函数类型,都允许继承
// 不同点是: interface是Ts的产物,用来定义对象类型,interface可以合并重复声明,type 不行
type是js的,可以用来定义基本类型,联合类型,交叉类型,元组,interface不行

// 重复声明的例子:
interface Sttudent1 {
    name: string
}
interface Sttudent1 {
    age: number
}
let zack:Sttudent1 = {
    name: 'zack',
    age: 19
}
// typeof类型判断和 as类型断言
function getLength(str: number | string): number {
// return str.length 会报错应为number类型没有length
if (typeof str === 'string') {
return str.length
}
return str.toString().length
} function getLength1(str: number | string): number {
const str1 = str as string
if (str1.length) return str1.length
const str2 = str as number
return str2.toString().length
}

// 字面量类型
type sex = '男' | '女'
// 泛型语法是<> 里面写类型参数,一般用<T>来标识,可以解决输入和输出一致的问题
function student<T>(name: T):T {
return name
}
const res: string = student('123')
const res1: Number = student(123) // 添加默认参数
interface IPay<T =string> {
(age:T): T
}
function pay<T>(age: T) {
return age
}
const mypay:IPay = pay

// 泛型约束
interface Ilength {
    length: number
}
function getlength<T extends Ilength>(age: T):T {
    return age
}
const str1 = getlength('123')
const str2 = getlength([])
const str3 = getlength(123)  // 报错

typeScript中特殊类型定义的更多相关文章

  1. 聊聊 TypeScript 中的类型保护

    聊聊 TypeScript 中的类型保护 在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况: interface Bird { // 独有方法 fly(); // 共有方法 lay ...

  2. TypeScript 中枚举类型的理解?应用场景?

    一.是什么 枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说,枚举就是一个对象的所有可能取值的集合 在日常生活中也很常见,例如表 ...

  3. JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)

    在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...

  4. 5种在TypeScript中使用的类型保护

    摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...

  5. TypeScript Type Compatibility(类型兼容)

    TypeScript中的类型兼容是基于结构归类的.在普通分类的相比之下,结构归类是一种纯粹用于将其成员的类型进行关联的方法.思考下面的代码: interface Named { name: strin ...

  6. TypeScript Type Innference(类型推断)

    在这一节,我们将介绍TypeScript中的类型推断.我们将会讨论类型推断需要在何处用到以及如何推断. 基础 在TypeScript中,在几个没有明确指定类型注释的地方将会使用类型推断来提供类型信息. ...

  7. Lua中的类型与值

    [基础介绍] Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8中基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字 ...

  8. NodeJS类型定义方式

    最近在学习nodejs,就是因为它比较轻便,并发量大,上手快.由于以前一直在做C#的后端,没有接触过javascript,所以还得慢慢学习之. nodejs所用的是javascript语言,它没有如C ...

  9. Golang通脉之类型定义

    自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. type是Go语法里的重要而且常用的关键字,type绝 ...

  10. 在 Typescript 2.0 中使用 @types 类型定义

    在 Typescript 2.0 中使用 @type 类型定义 基于 Typescript 开发的时候,很麻烦的一个问题就是类型定义.导致在编译的时候,经常会看到一连串的找不到类型的提示.解决的方式经 ...

随机推荐

  1. 安卓虚拟键盘挡住input框解决办法

    问题描述:ios弹出虚拟键盘的时候会自动将页面顶上去,不会遮住input输入框,而安卓则会挡住. 解决办法: 1.使用如下代码来区分安卓,存入localStorage中 if ((navigator. ...

  2. UE4笔记索引

    图形 渲染 延迟渲染 三维渲染流程 渲染优化 基本渲染 材质 材质节点组合 节点分类 特别的属性 其他 坐标空间与切线空间 坐标轴 编码 平台相关 UBT编译 命令行 程序到CPU路径 C++与蓝图互 ...

  3. 2022-05-20内部群每日三题-清辉PMP

    1.一位团队成员通知项目经理有一个问题可能会破坏项目.项目经理将该问题添加到问题日志中,并要求团队找到解决方案. 项目经理下一步应该怎么做? A.更新风险登记册 B.修订项目管理计划 C.确定适当的风 ...

  4. chatGPT搭建之旅

    昨天接到领导需求,要我搭建一个chatGPT玩玩,并给了一个链接地址:https://gitee.com/RockChin/QChatGPT 然后历经千辛万苦,熬了一宿终于搭建了,中途踩了各种大坑小坑 ...

  5. 《CSOL大灾变》Mobile开发进度记录——扔掉与拾取武器的逻辑

    在武器系统的开发过程中,涉及到武器的丢弃逻辑.由于场景是复制场景,而自己写碰撞测试和抛物线以及重力下落来模拟扔掉一把武器,并且要防止武器扔到墙里.如果自己实现这些逻辑,那么会占用渲染线程的时间开销,即 ...

  6. 【SSO单点系列】(9):CAS4.0 之客户端排除不需要过滤的路径

    客户端排除不需要过滤的路径 Web.xml <filter> <filter-name>CASFilter</filter-name> <filter-cla ...

  7. zabbix连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

    要解决此错误,有两种解决方法: 1.将连接参数"host"的值由"localhost"改成"127.0.0.1": 2.按下面方法,在&qu ...

  8. java 之 UncaughtExceptionHandler异常处理机制

    1.java 1.5版本出现的 UncaughtExceptionHandler 当线程由于未捕获异常突然终止时调用的处理程序的接口. 当一个线程由于未捕获异常即将终止时,Java虚拟机将使用thre ...

  9. 常见的Native Crash类型,bug解决记录

    APP调用Native的jar包接口出现闪退,仅仅settings应用,其他应用调用该包接口正常使用. 猜测1. jar包为64为,settings程序为32位,版本兼容性问题.(经验证,原因确实如此 ...

  10. oracle ebs 加锁

    DECLARE -- lock l_lockname VARCHAR2(100); l_lockhandle VARCHAR2(200); l_lock_output NUMBER; l_locked ...