【TS】TypeScript 类型推断、类型断言

文章目录

类型推断

场景一:初始化变量

场景二:决定函数返回值

类型断言

语法一:值 as 类型

语法二:<类型>值

【非空断言】


类型推断

如果没有明确的指定类型,TypeScript 会依照类型推断( Type Inference )的规则推断出一个类型,隐式设置类型注解。这种推断发生在初始化变量决定函数返回值时。换句话说,由于类型推断的存在,这些情况,类型注解可以省略不写!

注意:对于开发者没有指定类型、TypeScript 必须自己推断类型的那些变量,如果无法推断出类型,TypeScript 就会认为该变量的类型是 any 。

// 声明变量并立即初始化值,此时,可以省略类型注解
let age = 18
// 注意:如果声明变量但没有立即初始化值,此时,还必须手动添加类型注解
let a: number

如果不知道类型,可以将鼠标悬停在变量名称上,利用 VSCode 的提示来查看类型。

场景一:初始化变量

let x = [0, 1, null];
x = [0, 1, 'a'];

场景二:决定函数返回值

函数参数若不设置类型注解也会隐式设置 any 类型,不过会报错。

function add(num1: number, num2: number) {
    return num1 + num2
}

类型断言

TypeScript 提供了“类型断言”这样一种手段,允许开发者在代码中指定(断言)某个值的类型,告诉编译器此处的值是什么类型。

TypeScript 一旦发现存在类型断言,就不再对该值进行类型推断,而是直接采用断言给出的类型。

这样虽然削弱了 TypeScript 类型系统的严格性,但是为开发者带来了方便,毕竟开发者比编译器更了解自己的代码。

语法格式:<类型>值 或 值 as 类型

案例

getElementById 方法返回值的类型是 HTMLElement,该类型只包含所有标签公共的属性或方法,不包含 a 标签特有的 href 等属性。

const aLink = document.getElementById('link');
console.log(aLink.href);

解决办法:通过类型断言,将 aLink 的类型变为一个更加具体的类型(HTMLAnchorElement 是 HTMLElement 的子类型),这样就可以访问 a 标签特有的属性或方法了。

技巧:通过 console.dir(aLink) 打印 DOM 元素,在属性列表的最后面,即可看到该元素的类型。

语法一:值 as 类型

const aLink = document.getElementById('link') as HTMLAnchorElement;
console.log(aLink.href); // http://www.baidu.com/

语法二:<类型>值

const aLink = <HTMLAnchorElement>document.getElementById('link');
console.log(aLink.href); // http://www.baidu.com/

【非空断言】

对于那些可能为空的变量(即可能等于 undefined 或 null ),TypeScript 提供了非空断言,保证这些变量不会为空,变量名后面加上感叹号( ! )即可。

注意:非空断言只有在设置 "strictNullChecks": true 时才有意义。如果不打开这个选项,编译器就不会检查变量是否可能为 undefined 或 null 。

{
    "compilerOptions": {
        "strictNullChecks": true, 
    },
}
function f(x: number | null) {
    console.log(x.toFixed()); // 由于“x”可能为 “null” 出现报错
}
f(2);

例1:上面示例中,形参 x 为必传参数,因其类型注解为 number | null ,编译器识别x可能为null于是报错,这时就可以使用非空断言,为函数体内部的变量 x 加上后缀( ! ),x!.toFixed() 编译就不会报错了。

function f(x: number | null) {
    console.log(x!.toFixed()); // 正确
}
f(2);

例2:在定义类属性时,若配置 "strictPropertyInitialization": true(默认),则要求类的属性必须初始化(即有初始值),如果不对属性赋值就会报错。

{
    "compilerOptions": {
        "strictPropertyInitialization": true,
    },
}

如果不希望出现报错,可以使用非空断言( ! )。

class Point {
  x: number; // 报错
  y: number; // 报错
}

class Point {
  x!: number; // 正确
  y!: number; // 正确
}

TypeScript 教程——阮一峰·著

TypeScript 中文网

TypeScript 官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: import tushare as ts 是Python中导入tushare模块的语句。tushare是一个提供股票数据和金融数据的Python库,可以用于股票分析和量化交易等领域。通过导入tushare模块,可以使用其中的函数和方法来获取股票数据、财务数据等信息。 ### 回答2: import tushare as ts是Python中用于导入tushare库的语句。tushare是一个开源的财经数据接口库,可以获取股票、基金等金融数据。它提供了多种数据查询接口,包括股票行情、基金净值、宏观经济数据、大宗商品价格等,覆盖了国内外大部分的金融数据。 通过导入tushare库,我们可以使用其中的函数和方法进行各种数据查询和分析。例如,我们可以使用tushare库中的get_hist_data函数获取某只股票的历史行情数据,然后对这些数据进行统计分析、可视化处理等。 tushare是一个非常实用的金融数据接口库,可以方便地获取各种金融数据,供我们进行投资决策和分析。同时,它还提供了简洁易懂的Python API文档,方便开发者进行学习和使用。在金融分析和量化交易领域,tushare已经成为了不可或缺的工具之一。 ### 回答3: import tushare as ts是Python中一个非常有用的库,主要是用于股票数据分析。Tushare作为一个开源、免费的数据平台,能够提供全面、高质量、实时的股票数据。它包含了A股、基金、期货、债券、外汇等多个市场的数据,而且数据更新速度非常快,每日将近15万次次更新。这些数据包括了行情数据、复权数据、实时交易数据、分红送股数据、财务数据以及宏观经济数据等。除了数据,tushare还提供了相应的数据分析工具和可视化工具,能够帮助用户更好地理解数据,并从中发现数据中的潜在价值。对于需要进行股票数据分析的人来说,import tushare as ts可以大大提高他们的工作效率,同时也能够提供更加准确全面的数据,使他们做出的分析结果更加可信。总之,import tushare as ts是一个非常值得推荐的Python库,它能够为股票数据分析领域的从业者,提供极大的便利和好处。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值