【字节青训营】| TypeScript基础—预备知识

目录

TS与JS的关系

 TS的编译过程

类型系统

结构类型系统(Structural Type System)

名义类型系统(Nominal Type System)

 类型注解


TS与JS的关系

  • TypeScript是JavaScript的超集。
  • TypeScript提供所有JavaScript特性,并在JavaScript的基础上增加了TypeScript类型系统
  • TypeScript类型系统被设计为“可选”系统,这意味着所有的JavaScript代码都是合法的TypeScript代码。

 TS的编译过程

在TS编译过程中,‘TS的类型检查’和‘生成JS代码’是两个独立的过程,所以类型检查出错并不影响JS代码生成。跟C++编译过程对比一下就知道啦

类型系统

结构类型系统(Structural Type System)

通过类型的实际结构来确定两个类型是否相等或兼容。

这种类型的语言有TypeScript、Haskell、OCaml、Go等。

class Foo {
    public hi() {
        console.log('hi');
    }
}
class Bar {
    public hi() {
        console.log('hello');
    }
}
const a: Foo = new Foo();
const b: Bar = a;
b.hi();

看,只要结构相同就能行,但是名义类型系统的语言就不行了。

名义类型系统(Nominal Type System)

通过类型的名称确定两个类型是否相等。

这中类型系统的语言有:C、C++、Java、C#、Rust等。

#include<iostream>
class Foo {
public:
    void hi() { std::cout << "hi" << std::endl;}
};
class Bar {
public:
    void hi() {
    std::cout << "hello" << std::endl;
    }
};
int main() {
Foo foo;
Foo &fooRef = foo;
//Error:type 'bar'cannot bind to a value of unrelated type 'Foo';
Bar &bar = foo;
 return 0;
}

 出错了:在名义系统中,一旦名字不同就会报错,所以这块要注意!

 类型注解

TypeScript注解放在后面加一个冒号:

#TypeScript
function log(message: string): void

这里我们顺便提一下别的语言的类型注解方法,进行对比

C++注解 放在前面,啥也不加

//C++
int printf(const char*, ... );

Objc注解  放在前面,加括号

#Objective-c
- (id)initWithInt:(int)value;

Julia注解 放在后面,加两个冒号

//Julia 
commission(sale::Int, rate::Float64)::Float64

有点困了,明天继续哈

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二琳爱吃肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值