TypeScript安装
npm install -g typescript
TypeScript介绍
1.ts文件直接书写js语法代码,html文件可直接引用ts文件,谷歌浏览器
可直接使用
2.ts文件存在ts语法代码,需要编译ts文件->js文件,html引入js文件使用
3.ts文件函数形参,需要某个类型进行修改->js文件中无改修饰类型
4.ts文件let -> js文件var
类型注解
轻量级的为函数或者变量添加的约束
不确定类型使用unknown
基础类型定义
function add(a: number, b: number): number {
return a + b
}
let num10:number = 10;
let num2:number = 0b10101;
let num8:number = 0o12;
let num16:number = 0xaa;
let s: string = 'xxx'
let b: boolean = true
let as: number | string = '5'
let varAny: any
varAny = 10
let u: unknown
u = 'xzp'
类型断言
s = u as string
s = <string>u
函数返回值void/never
function fn(): void {
}
function fu(): never {
throw new Error('xxx')
}
对象定义
let objError: object
objError = {}
objError = function () { }
let obj: { name: string, age?: number }
let c: { name: string, [propName: string]: any }
let c1: { name: string, [xxx: number]: any }
c = { name: 'xzp', age: 18, sex:'xy' }
函数定义
let func: (a: number, b: number) => number
func = function (a: number, b: number): number {
return a + b
}
const getName = function (fName: string = 'x', lName: string): string {
if (lName) {
return fName + lName
}
return fName
}
function showName(str: string, ...args: string[]) {
console.log(str)
console.log(args)
}
function add(x: number, y: number): number
function add(x: string, y: string): string
function add(x: number | string, y: number | string): number | string {
return x + y
}
数组定义
let arrS: string[]
arrS = ['a', 'b']
let arrN: Array<number>
arrN = [1, 2, 3]
let arrL: [string, number]
arrL = ['xzp', 25]
枚举定义 enum
enum sex {
male = 0,
female = 1
}
let person: { name: string, sex: sex }
person = {
name: 'xzp',
sex: sex.male
}
console.log(person.sex === sex.male);
总结补充
let objA: { name: string } & { age: number }
objA = { name: 'xzp', age: 25 }
type xx = string | number | boolean
let snb: xx
snb = 'xx'
snb = 16
snb = true
tsconfig.json配置
{
"include": [
"./src/**/*"
],
"exclude": [
"./scr/public"
],
"compilerOptions": {
"target": "es5",
"module": "amd",
"outDir": "./dist",
"outFile": "./dist/app.js",
"allowJs": true,
"checkJs": true,
"removeComments": true,
"noEmit": true,
"noEmitOnError": true,
"alwaysStrict": false,
"noImplicitThis": true,
"strictNullChecks": true,
"strict": true
}
}
类定义class
public->公有的,任何位置都可以访问
private->私有的,外部无法访问,子类也无法访问
protected->受保护的,外部无法访问,子类可以访问
readonly->外部与类方法均无法修改name,仅构造函数可以修改
static->静态的,类名.静态属性 访问/设置,static不可以修饰构造函数
class Person {
name: string
constructor(name:string){
this.name = name
}
readonly sex: string = 'male'
static age: number = 25
eat() {
console.log('eat pig!');
}
}
类的继承
abstract class Animal {
name: string
constructor(name: string) {
this.name = name
}
abstract say(): void
}
class Dog extends Animal {
age: number
constructor(name: string, age: number) {
super(name)
this.age = age
}
run() {
console.log(`${this.name}冲冲冲`);
}
say() {
console.log('汪汪汪');
}
}
接口定义与使用
接口可作为声明类型使用
接口限制类的结构
接口定义对象属性与结构,不赋值
interface mdIf {
name: string
}
interface mdIf {
say(): void
}
const obj: mdIf = {
name: 'xxx',
say() {
console.log('xxx');
}
}
class myClass implements mdIf {
name: string
private _age: number
constructor(name: string) {
this.name = name
}
get age(): number {
return this._age
}
set age(val: number) {
if (val > 0 && val <= 150) {
this._age = val
}
}
say() {
console.log('xxx');
}
}
泛型(定义函数、接口、类不确定数据类型)
function getArr<T>(value: T, count: number): T[] {
const arr: T[] = []
for (let i = 0; i < count; i++) {
arr.push(value)
}
return arr;
}
const arr = getArr<number>(10, 5)
const arrStr = getArr<string>('xzp', 5)
function getMsg<K, V>(value: K, value2: V): [K, V] {
return [value, value2]
}
interface ITest<T> {
data: Array<T>;
add: (t: T) => T;
getId: (id: T) => T;
}
class Person<T, K>{
age: K
eat: (x: T, y: T) => T
}
const p: Person<string, number> = new Person<string, number>()
p.age = 100;
p.eat = function (x, y) {
return x + y
}
p.eat('饭', '菜')
interface ILength {
length: number;
}
function getLen<T extends ILength>(x: T): number {
return x.length
}
声明文件
import jQuery from 'jquery'
declare var jQuery:(selector:string)=>any
jQuery('#xxx')
内置对象ES
let b:Boolean = new Boolean(1)
let n:Number = new Number(true)
let s:String = new String('xxx')
let d:Date = new Date()
let r:RegExp = /\.css$/
let e:Error = new Error('error msg')
const div:HTMLElement = document.getElementById('xzp')
const divs:NodeList = document.getElementByClass('xzp')
document.addEventListener('click',(event:MouseEvent)=>{})