今天我们要来学一下『接口』
https://tslang.cn/docs/handbook/interfaces.html
1、我们来设计一个新闻实体类;设计一个函数来添加新
下面是传统的做法:
let NewsEntity = {
"title":"新闻标题",
"content":"新闻内容"
}
let addNews = function (news) {
console.log(news.title);
}
addNews(NewsEntity)
上面代码,我们执行的时候是会正常打印出:新闻标题
。那是因为我们确实给addNews()
传递的参数对象中有title
这个属性,可以想象如果我们传错了就会导致整个代码错误。
JavaScript在写代码的时候并没有一定的强制规范,所以导致有些错误很难调试。
所以我们使用TypeScript
给我们一个强制的规范。
我们通过TS中的接口,来约束:
// 定义新闻实体类接口
// title是字符串 content是可选的字符串
interface NEInterface {
title:String,
content:string
}
// 定义函数接口
// 参数是NEInterface类型的 无返回值的
interface NEFunction {
(xxx:NEInterface):void
}
然后我们的新闻实体类和函数都要继承相关的接口:
let NewsEntity:NEInterface = {
"title":"新闻标题",
"content":"新闻内容"
}
let addNews:NEFunction = function (news) {
console.log(news.title);
}
有了这一层约束,在写代码的时候编辑器就会报错提示我们啦
比较难理解的混合类型
interface NEInterface {
title:String,
content?:string
}
interface NEFunction {
(news:NEInterface):void,
addNews():void,
updateNews():void,
version:string
}
// 返回一个实现了NEFunction的函数
function NewsFunction(news:NEInterface):NEFunction{
let func = <NEFunction>function (news:NEInterface) {
this.getNews = news;
};
func(news);
func.addNews = ()=>{
console.log(this.getNews.title+"新增成功");
}
func.updateNews = ()=>{
console.log(this.getNews.title+"更新成功");
}
func.version = "version 1.0";
return func;
}
// 调用函数
let News:NEInterface = {
"title":"我是标题",
"content":"我的内容"
}
NewsFunction(News).addNews();
NewsFunction(News).updateNews();
console.log(NewsFunction(News).version);
编译执行: