TypeScript & JavaScript 学习笔记
记录学习TypeScript,Js过程中遇到的一些问题
- TypeScript中type关键字: 一种用法是
JsonPrimitive = null| boolean| string| number
这种是union type, 可以理解为这是一种类型的集合 - TypeScript可以理解为Js的超集,即在Js的基础上增加静态类型检查等等
- JavaScript中的
Promise
是抽象异步处理对象以及对其进行各种操作的组件,即对于异步的处理抽象并提供了标准的错误处理,以及回调机制 Promise
an object that will return a value in future. Promise非常适合于异步的JavaScript编程。Promise
和Callback
本质上是等价的,但是Promise有着如下一些优点- Promise减少了很多嵌套代码,reduce the amount of nested code
- Promise 允许简单的可视化执行流程
- Promise 可以统一的在最后的chain中处理错误,
chargeCustomer(customer).then(_ => addToDatabase(customer)).then(_ => sendEmail(customer) ).then(result => res.send('success!'))).catch(err => console.log(err))
Promise
状态,通过new Promise实例化的promise对象有以下三种状态has-resolution
- Fulfilled: resolve成功,此时会调用onFulfilled
has-rejection
- Rejected: reject失败,此时会调用onRejected
unresolved
- Pending 既不是resolve,也不是reject,Promise对象刚被创建后的初始化状态
Promise
初始化传入resolve
和reject
。resolve
向then传递信息,reject
向catch
传递信息await/async try catch
async/await
搭配使用处理异步流程即,一个async function
通常会带有一个await
. 且await
会暂停程序的执行流程直到promise resolved
,await
只能在async
函数体里面使用async function
会将结果包装成一个Promise返回- TypeScript:
unknown
关键字和any
关键字差不多。任何一个类型的值可以赋值给unknown,然而和any
不一样的是:1. 不能访问unknown类型的属性(properties), 2. 不能调用unknown,和构造(can't call/construct unknown type)。 unknown
类型只能赋值给unknown,any类型,unknown类型的主要目的是在any类型的基础上加一些限制。
let foo: unknown = 10;
function hasXYZ(obj: any): obj is {
x: any, y: any, z: any } {
return !!obj &&
typeof obj === "object" &&
"x" in obj &&
"y" in obj &&
"z" in obj;
}
// Using a user-defined type guard...
if (hasXYZ(foo)) {
// ...we're allowed to access certain properties again.
foo.x.prop;
foo.y.prop;
foo.z.prop;
}
// We can also just convince TypeScript we know what we're doing
// by using a type assertion.
upperCase(foo as string);
function upperCase(x: string) {
return x.toUpperCase();
}
- TypeScript中is关键字,通常用作于类型预测(
type predicate
), 当TypeScript使用了type predicate
之后,在代码块中将指定了对象的类型,有两个优点,即类型检查,和ide支持intelligence。 - TypeScript支持泛型(
generic
,template
),泛型区别于any,设计泛型的关键是在于成员之间提供有意义的约束,即限定了所有以泛型类型传参的地方,泛型可以传递并捕获对象的类型信息,类似于类型约束,例如可以实现泛型的queue等等,泛型通常用于实现通用且可复用的组件。 - TypeScript中的const关键字即在变量声明时进行初始化,切const关键字不允许给已声明的变量重新赋值(
prevents re-assignment to a variable
) - JavaScr