npm install -g typescript
cnpm install -g typescript
yarn -g add typescript
tsc helloworld.ts
node helloworld.js
npm install -g yarn
npm install -g cnpm
1. tsc --int 生成配置文件 tsconfig.json
2. 修改 tsconfig.json, 打开注释 outDir: './js'
3. 选择 终端 -> 运行任务 -> tsc:监视-tsconfig.json 然后就可以自动动态监听代码
typescript 数据类型:
boolean 布尔类型
number 数字类型
string 字符串类型
array 数组类型
tuple 元组类型
enum 枚举类型
any 任意类型
null
undefined
void 空类型
never
function func ():string{
return '123123'
}
const func = function ():number {
}
function func (name: string, age: number): string {
return `${name}-${number}`
}
function func ():void {
}
function func (name:string,age?:number):string {
return '可选参数函数'
}
function func (name: string, age:number=30):string{
retun '返回字符串'
}
function func (...arg:number[]):number{
return '返回数字类型'
}
func(1,2,3,4)
function func(arg1:number, arg2:number, ...arg3:number[]):number{
return '返回数字类型'
}
func(1,2,3,4,5,6)
java 中方法的重载:重载指的是两个或者两个以上同名函数, 但它们的参数不一样, 这时会出现函数重载的情况
typescript 中的重载, 通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
function func (name;string):string
function func (age:number):string
function func (str:any):any{
if (typeof str==='string') {
return `${str}--名字`
} else {
return `${str}--年龄`
}
}
(1) 最简单的类
function Person () {
this.name = "张三"
this.age = 20
}
var p = new Person()
(2)
function Person () {
this.name = '张三'
this.age = 20
this.run = function () {
console.log(this.name + '运动')
}
}
var p = new Person()
p.run()
(3)
function Person () {
this.name = '张三'
this.age = 20
this.run = function () {
console.log(this.name)
}
}
Person.prototype.sex="男"
Person.prototype.work = function () {
console.log(this.name)
}
var p = new Person()
p.run()
(4)
function Person () {
this.name = '张三'
this.age = 20
this.run = function () {}
}
Person.prototype.sex='男'
Person.prototype.work = () => {}
function child () {
Person.call(this)
}
var cd = new child()
cd.run()
(1) public: 公有 (在类里面、子类、类外部里面都可以访问, 默认公有属性)
(2) protected: 保护类型 (在类里面、子类里面可以访问, 在类外部没法访问)
(3) private: 私有 (在类里面可以访问, 子类、外部都没法访问)
class Person {
name:string
constructor ( name: string ) {
this.name = name
}
run():void {
console.log(this.name)
}
}
let p = new Person()
p.run()
console.log(p.name)
class Father{
name: string
constructor (name: string) {
this.name = name
}
run (): string {
return `${this.name}在运动`
}
}
class Child extends Father{
constructor (name: string) {
super(name)
}
}
const child = new Child('王五')
child.run()
function Person () {
this.run = function () {
}
}
Person.name = "我是静态属性"
Person.add = function () {
}
let p = new Person()
Person.add()
class Person {
public name;
static sex;
run () {
}
static add () {}
}
let p = new Person()
p.run()
Person.add()
class Animal {
name: string;
contructor (name: string) {
this.name = name
}
eat () {
console.log(this.name)
}
}
class Dog extends Animal {
constructor (name: string) {
super(name)
}
}
abstract class Animal {
abstract eat():any;
}
abstract class Animal {
public name:string;
constructor (name: string) {
this.name = name
}
abstract eat():any;
}
class Dog extends Animal {
constructor (name:string) {
super(name)
}
eat() {}
}
5.1 属性类接口
5.2 函数类型接口
5.3 可索引接口
5.4 类类型接口
5.5 接口拓展
function person():void{}
function person(name: string, age: number):string{}
function person(params: { name: string, age:number }): string {}
interface FullName {
firstName: string;
lastName: string;
}
function nameFunc (name:fullName) {}
interface FullName {
firstName: string;
lastName: string;
age?:number;
}
interface FullName {
(name:string, age:number):string;
}
let person:FullName= function(name:string, age:number):string{}
let arr:number[] = [1,2,3,4]
let arr:Array<string> = ['a', 'b', 'c']
interface UserArr {
[index:number]:string;
}
let arr:UserArr = ['1', 'a', 'b']
interface Animal {
name: string;
eat(str:string):void;
}
class Dog implements Animal {
name:string;
constructor (name: string) {
this.name = name
}
eat () {}
}
interface Animal {
eat():void;
}
interface Dog extends Animal {
work():void;
}
class Mydog implements Dog {
name:string;
constructor (name:string) {
this.name = name
}
eat(){};
work(){};
}
function getData(value:string):string{}
function getData(value: any):any{}
function getData<T>(value:T):T{}
getData<number>(123)
class Minclass<T> {
list:T[]=[];
add(value:T):void{}
}
let ml = new Minclass<number>()
interface Config {
(value1:string, value2:number): string
}
let sd:Config = function (value1:string,value2:number):string{}
interface Config {
<T>(value:T):T
}
let sd:Config=function<T>(value:T):T{}
sd<string>('李四')
interface Config<T>{
(value:T):T
}
function sd<T>(value:T):T{}
let mySD:config<string>=sd
mySD('20')
(1) 泛型的定义
(2) 泛型函数
(3) 泛型类
(4) 泛型接口
class ArtcleCate {
title: string | undefined;
desc: string | undefined;
status: number | undefined
}
class MysqlDb {
add(info:ArtcleCate):boolean {}
}
let artcleCate = new ArtcleCate()
artcleCate.title = '标题'
artcleCate.desc = '好好学习, 天天向上'
artcleCate.status= 1
let mysqlDb = new MysqlDb()
mysqlDb.add(artcleCate)
class User {
username: string | undefined;
password: string | undefined;
}
class MysqlDb {
add(info:ArtcleCate):boolean {}
}
let user = new User()
user.username = '李四'
user.password = '123132'
let Db = new MysqlDb<User>()
DB.add(u)