3.typescripts代码练习
//函数
function greet(name:string)
{
return "hello "+name
}
let greet2 = function(name:string)
{
return "hello "+name
}
//箭头函数表达式
let greet3 = (name:string)=>{
return "hello "+name
}
//箭头函数表达式简写形式
let greet4 = (name:string)=> "hello "+name
//函数构造方法
//let greet5 = new function('name','return "hello " + name')
//可选和默认的参数
function log2(message2:string,userId2?:string)
{
let time = new Date().toLocaleTimeString(); //typescript时间打印
console.log(time,message2,userId2||'not sgined in')
}
log2('page loaded')
log2('user log in','st111')
//剩余参数
function sum(number2:number[]):number{
return number2.reduce((total2,n)=>total2+n,0)
}
function max(number2:number[]):number{
return number2.reduce((total2,n)=>Math.max(total2,n))
}
//typescript ts reduce的使用
//https://www.cnblogs.com/txwtech/p/18096660
console.log("求和:"+sum([1,2,3]))//传递实参数组
console.log("求最大值:"+max([1,2,3]))//传递实参数组
//call ,apply bind
//apply为函数内部的this绑定一个值,然后展开第二个参数,作为参数传给要调用的函数。
//cal1的用法类似,不过是按顺序应用参数的,而不做展开。
//bind()差不多,也为函数的this和参数绑定值。不过,bind并不调用函数,而是返回一个新函数,让你通过()、.cal1或.apply调用,而且可以再传入参数,绑定到尚未绑定值的参数上。
function add(a:number,b:number):number{ //最后一个number就是返回值得类型
return a+b
}
add(1,2)
add.apply(null,[1,2])
add.call(null,10,20)
add.bind(null,10,20)();
//
function funcDate(this:Date)
{
//return ${this.getFullYear}/${this.getMonth()}/${this.getDate()}
return this.getFullYear()+"/"+this.getMonth()+"/"+this.getDate()
}
console.log(funcDate.call(new Date()))
//生成器
function *createGenerator() //*表示生成器
{
let a=0
let b=1
while(true)
{
yield a; //生成器使用yield关键字产出值。使用方让生成器提供下一个值时(例如,调用next),yield把结果发给使用方,然后停止执行,直到使用方要求提供下一个值为止。因此,这里的while(true)循环不会一直运行下去,程序不会崩溃。
[a,b] = [b,a+b]
}
}
let fiboGen = createGenerator()
console.log(fiboGen.next())
console.log(fiboGen.next())
console.log(fiboGen.next())
console.log(fiboGen.next())
console.log(fiboGen.next())
console.log(fiboGen.next())
//生成器,显式注解生成器demo
function* createNumbers():IterableIterator<number>
{
let n =0
while(1)
{
yield n++
}
}
let numbers = createNumbers()
console.log(numbers.next());
console.log(numbers.next());
console.log(numbers.next());
console.log(numbers.next());
console.log(numbers.next());
console.log(numbers.next());
//调用标签
type Log2a=(message:string,userId?:string)=>void;
let logg_label:Log2a =(message,userId="not log in"
)=>{let time = new Date().toISOString()
console.log(time,message,userId)}
logg_label("txx","10699487");
//上下文类型推导
function times(f:(index:number)=>void,
n:number
){
for(let i=0;i<n;i++)
{
f(i)
}
}
times(n1=>console.log(n1),5)
//函数重载
// type Resever2 ={
// (from:Date,to:Date,destin:string):Reservation
// (from:Date,destin:string):Reservation
// }
// let reserve3:Resever2 =(from:Date,
// toOrdesin:Date|string,
// destin?:string
// )=>{}
//javascript示范
// function filter2(array,f)
// {
// let ret =[]
// for(let i =0;i<array.length;i++)
// {
// let item = array[i]
// if(f(item))
// {
// ret.push(item)
// }
// }
// return ret
// }
// filter2([1,2,3,4],_=>_<3)
//多态
//泛型参数:
type Filter3 = {
<T>(array:T[],f:(item:T)=>boolean):T[]
}
let filter3a:Filter3 = (array,f)=>{
let ret =[]
for(let i =0;i<array.length;i++)
{
let item = array[i]
if(f(item))
{
ret.push(item)
}
}
return ret
}
console.log( filter3a([1,2,3,4],aa=>aa<3))//筛选小于3的值:打印:[ 1, 2 ]
function map2<T,U>(array2:T[],f:(item:T)=>U){
}
function test11(str:string)
{
let aa = map2<string,boolean>(['a','b','c'],_=>_==='a')
}
map2(['a','b','c'],_=>_==='a')
let promise2 = new Promise<number>(resolve=>resolve(45))
promise2.then(result2=>result2*4)
欢迎讨论,相互学习。
cdtxw@foxmail.com