typescirpt
1、如何使用泛型变量: 把参数当做是任意或所有类型
function identity<T>(arg: T): T{
console.log(arg.length); //Error: T doesn't have.length
return arg;
}
上述报错是因为: 这些类型变量代表的是任意类型,如果使用这个函数传入的是数字,而数字是没有.length属性的。
2、泛型约束extends: 限制函数属性
interface LengthWise {
length: number
}
function identity<T extends LengthWise>(arg: T): T{
console.log(arg.length); //不再报错
return arg;
}
3、在泛型约束中使用类型参数
声明一个类型参数,且他被另一个类型参数约束。
例子: 用属性名从对象中获取属性,并且这个属性存在于对象上,需要在这两个类型中使用约束。
fucntion getProperty(T,K extends keyof T>(obj: T,key: K) {
return obj[key];
}
let x = {a:1,b:2,c:3};
getProperty(x,'a'); // 1
4、symbol类型
symbol 类型的值是通过Symbol构造函数创建的。
let sym = new Symbol();
let sym2 = new Symbol('key');
Symbols是不可改变且唯一的
let symbol2 = Symbol('key');
let symbol3 = Symbol('key');
symbol2 === symbol3; // false
可以用作对象key
tsconfig.json
作用:指定用来编译这个项目的根文件和编译选项。
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true
},
"files": [
"core.ts",
"sys.ts",
"types.ts",
"scanner.ts",
"parser.ts",
"utilities.ts",
"binder.ts",
"checker.ts",
"emitter.ts",
"program.ts",
"commandLineParser.ts",
"tsc.ts",
"diagnosticInformationMap.generated.ts"
]
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
files指定一个包含相对或绝对文件的路径的列表。
include 和exclude属性指定一个文件glob匹配模式列表。支持的glob通配符有:
- *匹配0/多个字符(不包括目录分隔符)‘
- ?匹配一个任意字符(不包括目录分隔符)
- **/递归匹配任意子目录
相关练习
https://juejin.cn/post/7110232056826691591