type 和 interface 的区别

type 可以定义基本类型 也可以定义对象、数组、函数等

// 1. 定义基本类型
type StudentNameType = string;
const studentName: StudentNameType = "张三"; // 2.定义对象
type StudentType = {
name: string;
age: number;
}
const student: StudentType = {
name: "张三",
age: 18
} // 3. 定义数组
type Love = string[];
const love: Love = ["足球", "篮球"]; // 4. 定义函数
type Add = (a: number, b: number) => number;
const add: Add = (x,y)=>x+y;

相比之下,interface 则不能定义基本类型。这是从定义类型这个基本功能上边来比较!

除此之外两者还有其他不同,

  1. type 可以定义联合类型、交叉类型,而 interface 则是被继承和实现。
  2. type 不可以重复定义,而 interface 允许重复定义 并会被合并。

namespace 和 module 的区别

namespace 和 module 都可以用来组织代码,在编译之后代码是一样的,生成一个全局对象。

// 源码(namespace 可以 替换为 module)
namespace JSQUtilsNamespace {
const name = "计算器工具";
type Add = (a: number, b: number) => number;
const add: Add = (x,y)=>x+y;
console.log(add(1,2));
}
// 编译后
var JSQUtilsNamespace;
(function (JSQUtilsNamespace) {
var name = "计算器工具";
var add = function (x, y) { return x + y; };
console.log(add(1, 2));
})(JSQUtilsNamespace || (JSQUtilsNamespace = {}));

虽然编译后的代码是一样的,但是两者的设计理念不同。

  • namespace:主要用于组织和封装代码,在同一个文件中将相关的代码分组。它是一种 内部模块化,并没有跨文件的依赖管理和导入导出功能。
  • module:module 用于 外部模块化,在多个不同文件之间共享代码。
// utils.ts
namespace Utils {
export function add(x: number, y: number): number {
return x + y;
}
export const name = "UtilsModule";
} const sum = Utils.add(1, 2); // 使用 namespace 中的功能
console.log(sum); // 输出 3
// utils.ts
module Utils {
export function add(x: number, y: number): number {
return x + y;
}
export const name = "UtilsModule";
} // app.ts
/// <reference path="utils.ts" />
const sum = Utils.add(1, 2); // 引用 utils.ts 中的 module
console.log(sum); // 输出 3

TypeScript 1.5 之后的变化

从 v1.5 开始,module 关键字被 废弃,并由 ES6 的 import/export 模块语法取代。现在的模块系统更符合现代 JavaScript 模块化标准。namespace 仍然作为TS组织代码的工具存在,但它不再是标准的模块系统。

不过 ts 还是保留了 declare module xxx 的这种特殊用法,主要用于 为外部模块或库声明类型。这种用法通常出现在 d.ts 文件 中,目的是 为 JavaScript 库或没有类型定义的第三方模块提供类型声明。这样 TypeScript 就能理解这些模块的接口,以便在项目中使用时提供类型检查。

其它

d.ts文件

d.ts 文件是专门定义类型声明的文件,在编译过程中不会生成额外的js代码文件。

需要注意的是 d.ts 文件仍需在tsc编译的时候指定路径,否则也不会能直接用。

tsc

安装了 TypeScript 之后 npm install -g typescript,就可以在命令行中使用 tsc 命令来编译 ts 文件。

tsc xxx.ts # 编译单个文件
tsc /src # 编译 src 目录下的所有 ts 文件
tsc # 编译当前目录下的所有 ts 文件

如果不想加后缀参数,可以在项目根目录下创建 tsconfig.json 文件。

{
"include": ["src/**/*","sometype.d.ts"]
}

type和interface与namespace和module的更多相关文章

  1. client-go客户端自定义开发Kubernetes及源码分析

    介绍 client-go 是一种能够与 Kubernetes 集群通信的客户端,通过它可以对 Kubernetes 集群中各资源类型进行 CRUD 操作,它有三大 client 类,分别为:Clien ...

  2. golang type 和断言 interface{}转换

    摘要 类型转换在程序设计中都是不可避免的问题.当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关 注这方面的问题.但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编 ...

  3. 【区分】Typescript 中 interface 和 type

    在接触 ts 相关代码的过程中,总能看到 interface 和 type 的身影.只记得,曾经遇到 type 时不懂查阅过,记得他们很像,相同的功能用哪一个都可以实现.但最近总看到他们,就想深入的了 ...

  4. Node.js简易服务器,配合type="module" 实现html文件script标签 ES module引入模块

    相信大家在测试type="module" 在html文件中直接模块化引入 js时,会出现一个跨域问题. 当我们将<script ></scirpt> 标签t ...

  5. The repository for high quality TypeScript type definitions

    Best practices This is a guide to the best practices to follow when creating typing files. There are ...

  6. C#调用Delphi接口(ITest = interface)

    首先创建一个delphi的DLL工程 library testintfdll; { Important note about DLL memory management: ShareMem must ...

  7. Irrlicht 3D Engine 笔记系列 之 教程5- User Interface

    作者:i_dovelemon 日期:2014 / 12 / 18 来源:CSDN 主题:GUI 引言 今天.博主学习了第五个教程. 这个教程解说了怎样使用Irrlicht内置的一个基础模块.GUI模块 ...

  8. 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.

    Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...

  9. TypeScript 之 Type

    Type 描述:全称叫做 '类型别名',为类型字面量提供名称.比 Interface 支持更丰富的类型系统特性. Type 与 Interface 区别 Interface 只能描述对象的形状,Typ ...

  10. 浅析Go语言的Interface机制

    前几日一朋友在学GO,问了我一些interface机制的问题.试着解释发现自己也不是太清楚,所以今天下午特意查了资料和阅读GO的源码(基于go1.4),整理出了此文.如果有错误的地方还望指正. GO语 ...

随机推荐

  1. .net WorkFlow 流程转办

    WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...

  2. Aspnet Core 10 Preview3已对最小API提供参数验证支持

    前言 相信大家都或多或少用上了Minimal API,快速简洁,性能炸裂,是快速开发API端口的不二之选!但是呢目前正式版为止 最小API还并不内置支持对请求参数的内置验证支持,比如[Required ...

  3. Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)

    本话讲的是Avalonia中相比于WPF更方便的一些特性 布局 布局方面没什么好说的,和WPF没什么区别,Grid,StckPanel...这些,不熟悉的话可以B站上找一下教程 xml树 在WPF中我 ...

  4. 基于OpenCV与Tesseract的文档扫描增强器实战教程(附完整代码)

    引言:文档数字化的智能解决方案 在移动办公时代,手机拍摄文档已成为常态,但随之带来的图像畸变.光照不均.文字倾斜等问题严重影响OCR识别效果.本文将通过OpenCV和Tesseract构建一款具备实时 ...

  5. 康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案

    随着自动驾驶技术的快速发展,车辆准确感知周围环境的能力变得至关重要.BEV(Bird's-Eye-View,鸟瞰图)感知技术,以其独特的视角和强大的数据处理能力,正成为自动驾驶领域的一大研究热点. 一 ...

  6. 再见,SSE!你好,Streamable HTTP!轻松开发 Streamable HTTP MCP Server

    大家好!我是韩老师. 之前和大家分享了三篇 MCP 相关的文章: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! 还是 ...

  7. TCP连接(Netty)

    启动类增加 public static void main(String[] args) { SpringApplication application = new SpringApplication ...

  8. 高度混淆和多层嵌套的JSP案例免杀思路

    免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任. 01 分析特征 目前webshell检测 ...

  9. OpenStack 全套搭建部署指南(基于 Kolla-Ansible)

    一.环境准备 1. 硬件要求 控制节点:至少 4 核 CPU,8GB 内存,100GB 磁盘(推荐 SSD). 计算节点:根据虚拟机需求调整,建议 8 核 CPU,16GB 内存,200GB+ 磁盘. ...

  10. IDEA问题之“接口路径查询插件【RestfulToolkit】”

    一.场景 只查询Java代码中的路径,这样就可以快速的找到对应的接口 快捷键:Ctrl + \ 二.安装步骤