备注:强制转换的使用
function getLength(x: number | 通达信 DLL数据接口,string): number {
return x.to通达信 DLL数据接口,string().length;
// return x.length; //错误
}
// 方式一: <类型> 值
function getLength1(x: number | string): number {
if ((x).length) {
return (x).length
} else {
return x.toString().length
}
}
// 方式二: 值 as 类型
function getLength2(x: number | string): number {
if ((x as string)) {
return (x as string).length
} else {
return x.toString().length;
}
}
接口定义,数组和对象取值
namespace ArrG {
interface UserArr {
[index: number]: string
}
//1.对数据的约束
var arr1: UserArr = ['aaa', '111'];
// var arr2:UserArr = ['aaa',111]; //错误
console.log(arr1[0])
//2. 对对象的约束
interface UserObj {
[index: string]: string
}
var obj1: UserObj = { name: '张三' } //正确
// var obj1:UserObj = {name:112} //错误
console.log(obj1)
}
接口计算
//函数类型接口:对函数的参数以及返回值进行约束
namespace FunctionA {
//不使用接口
var add1 = function(a:number,b:number):number{
return a+b;
}
//使用函数接口
interface CalcTwo {
(a:number,b:number):number
}
var add2:CalcTwo = function(a1:number,b1:number):number {
return a1+b1;
}
interface encrypt{
(key:string,value:string):string;
}
var md5:encrypt=function(key:string,value:string):string{
//模拟操作
return key+value;
}
console.log(md5('name','tony'))
}
namespace MathAdd {
interface CalcTwo {
(a: number, b: number): number
}
/**
* 计算数组被某种算法运算的结果
* @param {number[]} arr 数组
* @param {CalcTwo} calc 用户指定的算法函数
* @param {number} initVal 传入初始值
* @returns {number} 得到最终运算结果
**/
function calcArr(arr: number[], calc: CalcTwo, initVal: number): number {
// var result = initVal;
// arr.forEach((value,index)=>{
// result = calc(result,value)
// });
// return result
// 高阶函数
return arr.reduce(function (a, b) {
return calc(a, b)
}, initVal)
}
var arr: number[] = [1, 3, 5, 7, 9];
var sum = function (a1: number, b1: number): number {
return a1 + b1;
}
var multipy = function (a1: number, b1: number): number {
return a1 * b1;
}
//相加
var p1 = calcArr(arr, sum, 10);
console.log('相加:' + p1);
//相乘
var p2 = calcArr(arr, multipy, 10);
console.log('相乘:' + p2);
}
类继承接口
// 类类型接口用来规范一个类的内容。
// 类实现接口本质上 即类遵循接口的约束,接口里面写了多少个函数、参数,实现的类里面也要写相同的函数、参数。
namespace TT1 {
interface FullName {
username: string;
}
//WebCoder 需要遵循接口FullName的约束
class WebCoder implements FullName {
fruit:string;
username:string;
constructor(fruit01:string,username:string) {
this.fruit = fruit01;
this.username = username;
}
}
var p1 = new WebCoder('苹果','Alice');
console.log(p1);
}
namespace TT2 {
// 可以在接口中描述一个方法,并在类里具体实现它的功能,
// 如同下面的setName方法一样
interface FullName {
username: string;
setName(name:string):void;
getName():void
}
class Person implements FullName {
username:string;
constructor(username:string) {
this.username = username;
}
setName(str:string){
this.username = str;
}
getName(){
console.log(this.username);
}
}
var p1 = new Person('laney');
p1.setName('blood');
p1.getName();
}
使用接口
//使用接口 ,一种规范
namespace INK1 {
interface labelValue {
label: string;
apple: string;
// [propName:string]:any; //添加字符串的索引签名
// size?:string; //可传可不传
};
function printB(labelObj: labelValue) {
console.log('labelObj.label');
console.log(labelObj);
}
// 第一种断言 :
printB({
label: '你好',
// size:'10',
apple: 'ddd'
} as { apple: string; label: string })
//第二种方式:添加字符串的索引签名
printB({
label: '你好',
size: 10,
age: 10
})
//第三种:将字面量赋值给另外一个变量
var obj = {
label: '你好',
size: 10,
age: 10
}
}
文章为作者独立观点,不代表股票交易接口观点