TypeScript 进阶 类型推论

发布于 2024-11-10 03:39:16 字数 1813 浏览 40 评论 0

TypeScript 里,在有些没有明确指出类型的地方,类型推论会帮助提供类型

let x = 3; // 变量 x 的类型被推断为数字

如果声明的变量没有定义类型,也没有赋值。这时候 TS 会推断成 any 类型可以进行任何操作

let test;

test = 1;
test = 'str';
test = true;

最佳通用类型

当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型。

// 想让 zoo 被推断为 Animal[]类型,但是这个数组里没有对象是 Animal 类型的,因此不能推断出这个结果。
// 如果没有找到最佳通用类型的话,类型推断的结果为联合数组类型,(Rhino | Elephant | Snake)[]。
let zoo = [new Rhino(), new Elephant(), new Snake()];

// 当候选类型不能使用的时候我们需要明确的指出类型
let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

上下文类型

"上下文归类"会发生在表达式的类型与所处的位置相关时 。比如:

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.button);  //<- Error
};

这个例子会得到一个类型错误,TypeScript 类型检查器使用 Window.onmousedown 函数的类型来推断右边函数表达式的类型。 因此,就能推断出 mouseEvent 参数的类型了。

如果函数表达式不是在上下文类型的位置, mouseEvent 参数的类型需要指定为 any ,这样也不会报错了。

如果上下文类型表达式包含了明确的类型信息,上下文的类型被忽略。

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.button);  //<- Now, no error is given
};

上下文归类 使用情况:

通常 包含函数的参数赋值表达式的右边类型断言对象成员数组字面量返回值语句

上下文类型也会做为最佳通用类型的候选类型。

// 这个例子里,最佳通用类型有 4 个候选者:Animal,Rhino,Elephant,Snake。 而 Animal 会被做为最佳通用类型。
function createZoo(): Animal[] {
    return [new Rhino(), new Elephant(), new Snake()];
}

小结

没有指出类型的时候,类型推断发生在 初始化变量和成员,设置默认参数值 和 决定函数返回值时。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

深巷少女

暂无简介

文章
评论
385 人气
更多

推荐作者

夢野间

文章 0 评论 0

百度③文鱼

文章 0 评论 0

小草泠泠

文章 0 评论 0

zhuwenyan

文章 0 评论 0

weirdo

文章 0 评论 0

坚持沉默

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文