-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Typescript #59
Comments
安装与使用1、使用npm进行安装
2、验证Typescript安装版本 typescript 的命令为 tsc
3、编译ts文件
你也可以使用webpack的 |
TS 中的基础类型
Never 类型never 类型表示的是那些永不存在的值的类型。 例如,never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
在 TypeScript 中,可以利用 never 类型的特性来实现全面性检查,具体示例如下:
注意在 else 分支里面,我们把收窄为 never 的 foo 赋值给一个显示声明的 never 变量。如果一切逻辑正确,那么这里应该能够编译通过。但是假如后来有一天你的同事修改了 Foo 的类型: 然而他忘记同时修改 controlFlowAnalysisWithNever 方法中的控制流程,这时候 else 分支的 foo 类型会被收窄为 boolean 类型,导致无法赋值给 never 类型,这时就会产生一个编译错误。通过这个方式,我们可以确保 |
TS 断言类型断言1、使用尖括号语法
注意: 而 as 操作符在 .ts 文件和 .tsx 文件里都可用。 2、或者as:
非空断言使用感叹号! x! 将从 x 值域中排除 null 和 undefined 可以对变量或者函数使用
确定赋值断言同样使用感叹号! 告诉编译器该变量会被明确赋值
|
类型守卫类型保护是可执行运行时检查的一种表达式,用于确保该类型在一定的范围内。 换句话说,类型保护可以保证一个字符串是一个字符串,尽管它的值也可以是一个数值。类型保护与特性检测并不是完全不同,其主要思想是尝试检测属性、方法或原型,以确定如何处理值。目前主要有四种的方式来实现类型保护: 1、in |
联合类型和类型别名联合类型通常和undefined一起使用
可辨识联合组成联合类型的各个类型存在公共属性 类型别名
交叉类型通过&运算符将多种类型叠加,它包含了所有类型的特性:
|
访问控制修饰符有 public、private、protected
|
重写(override) vs 重载(overload)重写是指子类重写“继承”自父类中的方法 。虽然 TS 和JAVA 相似,但是 TS 中的继承本质上还是 JS 的“继承”机制—原型链机制 |
泛型泛型就是我们在定义哈书、接口或者类的时候,先不指定类型,而是等到使用的时候再告知类型的一种特性:
把 T 称为类型变量,你也可以对同一个函数或者类设置多个类型变量,通过尖括号包裹,并且用逗号隔开:
|
类型谓词使用 is 关键词来指定函数参数的类型: 用于当函数入参的类型为联合类型时,通过类型谓词来指定类型进行自定义类型保护的作用 |
?., !, ???. :可选链式运算符,先判断左侧表达式是否有值,如果有值,再访问右侧的属性,如果没有值则返回undefined,防止运行时报错,或者需要编写一长串的非空判断 |
模块从ECMAScript 2015(ES6)开始,JavaScript引入了模块的概念。TypeScript也沿用这个概念。 模块拥有自己的作用域;这意味着定义在一个模块里的变量,函数,类等等在模块外部是不可见的,除非你明确地使用export形式之一导出它们。 相反,如果想使用其它模块导出的变量,函数,类,接口等的时候,你必须要导入它们,可以使用 import形式之一。 模块是自声明的;两个模块之间的关系是通过在文件级别上使用imports和exports建立的。 模块使用模块加载器去导入其它的模块。 在运行时,模块加载器的作用是在执行此模块代码前去查找并执行这个模块的所有依赖。 大家最熟知的JavaScript模块加载器是服务于Node.js的 CommonJS和服务于Web应用的Require.js。 TypeScript与ECMAScript 2015一样,任何包含顶级import或者export的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的(因此对模块也是可见的)。 |
命名空间命名空间是为了提供逻辑分组和避免命名冲突。 可以在命名空间中声明接口、类、变量、函数等,通过export来将他们导出。
注意事项:
|
type 与 interface 的区别两者在大多数情况下可以互相替代,并且可以互相扩展,但是也是存在一些细微区别: 1、type 可以使用计算属性,interface 不能 |
class和interface的区别
|
常用的Utility TypesPartial构造一个类型,其所有属性的类型都设置为可选。此实用程序将返回表示给定类型的所有子集的类型。例如:
Pick<Type, Keys>通过从Type中选择属性键集(字符串、文字或字符串文本的联合)来构造类型。
Omit<Type, Keys>通过从原类型中排除掉一些属性,来构造一个类型
Parameters从函数的参数中使用的类型构造元组类型。
|
TS是什么
JS的超集,向JS这个语言添加了可选的静态类型和基于类的面向对象编程。
并且它提供了最新和不断发展的JS新特性。
TS和JS的区别
The text was updated successfully, but these errors were encountered: