OWZLAB-TS-JS笔记#
Data: 2026-02-27 16:18:34
读我的思维导图#
- 类型标注,建议使用小写。
- 不要乱用 any,会把其他的已经定义的值也给破坏掉(any -> unknow 会好点)。
- 断言写法
x = a as string;
x = <string>a;
// 都可以
// 下面是强制断言,看不太懂
let a: unkonwn;
a = 'hello';
a.toUpperCase(); // 其实会报错
(a as string).toUpperCase(); // 无错
然后是 never 。
不能有任何的值,用在函数上。但几乎用不到。
而 void 是返回值为 空,或者为 undefined 。
语义上,就是希望开发者不关心该函数的返回值。
比较陌生的有 元组,叫 tuple,但它不是关键字,不写在程序里。
比如:
let arr: [string, number];
let arr: [string, number?]; // 表示第二位可有可无
let arr: [number, ...string[]]; // 表示可以有无限多的 string 类型的元素
然后是 枚举 enum ,这个好像 JS 里也有,就不多说了。
有一种可减少 js 编译的方式:
const enum Direction { Up, Down, Left, Right, }创造全新类型,使用 type 。
很多公司的规范是,自己创造的 type ,要首字母大写。
示例如下:
type Status = number | string
// 这两种类型都可以
type Gender = '男' | '女'
// 只能使用这两种字符串
type Area = {}, type Address = {};
type House = Area & Address;
// 这样,House 就必须包含 Area 和 Address 都有的内容。
这个 interface 的作用是定一个契约,规定任何实现它的类必须有这三个东西:
name字符串age数字greet()方法
问号是可选属性
let person : {
name: string,
age?: number //有没有 age 都可
}
// person 是一个对象
// 如果后面想随意加,就:
let person: {
name: string
age: string
[key:string]:any
}
let arr: string[];
// 只能存字符串数组
let arr2: Array<number>
// 只能写数值数组
// 泛型