TypeScript基础入门之Javascript文件类型检查(二)「建议收藏」

TypeScript基础入门之Javascript文件类型检查(二)「建议收藏」TypeScript基础入门之Javascript文件类型检查(二)

大家好,又见面了,我是你们的朋友全栈君。

转发 TypeScript基础入门之Javascript文件类型检查(二)

继续上篇文章【TypeScript基础入门之Javascript文件类型检查(一)】

对象文字是开放式的

在.ts文件中,初始化变量声明的对象文字将其类型赋予声明。不能添加未在原始文本中指定的新成员。此规则在.js文件中放宽;对象文字具有开放式类型(索引签名),允许添加和查找最初未定义的属性。例如:

var obj = { a: 1 };
obj.b = 2;  // Allowed

对象文字的行为就像它们具有索引签名[x:string]:任何允许它们被视为开放映射而不是封闭对象的任何东西。

与其他特殊的JS检查行为一样,可以通过为变量指定JSDoc类型来更改此行为。例如:

/** @type {
   
   {a: number}} */
var obj = { a: 1 };
obj.b = 2;  // Error, type {a: number} does not have property b

null,undefined和empty数组初始值设定项的类型为any或any[]

使用null或undefined初始化的任何变量,参数或属性都将具有类型any,即使打开了严格的空检查。使用[]初始化的任何变量,参数或属性都将具有类型any[],即使打开了严格的空检查。唯一的例外是具有如上所述的多个初始值设定项的属性。

function Foo(i = null) {
    if (!i) i = 1;
    var j = undefined;
    j = 2;
    this.l = [];
}
var foo = new Foo();
foo.l.push(foo.i);
foo.l.push("end");

功能参数默认是可选的

由于无法在ES2015之前的Javascript中指定参数的可选性,因此.js文件中的所有函数参数都被视为可选参数。允许使用参数少于声明的参数数量的调用。

重要的是要注意,调用具有太多参数的函数是错误的。

例如:

function bar(a, b) {
    console.log(a + " " + b);
}

bar(1);       // OK, second argument considered optional
bar(1, 2);
bar(1, 2, 3); // Error, too many arguments

JSDoc注释函数被排除在此规则之外。使用JSDoc可选参数语法来表示可选性。例如:

/**
 * @param {string} [somebody] - Somebody's name.
 */
function sayHello(somebody) {
    if (!somebody) {
        somebody = 'John Doe';
    }
    console.log('Hello ' + somebody);
}

sayHello();

由arguments推断出的var-args参数声明

其主体具有对参数引用的引用的函数被隐式地认为具有var-arg参数(即(…arg: any[]) => any)。使用JSDoc var-arg语法指定参数的类型。

/** @param {...number} args */
function sum(/* numbers */) {
    var total = 0
    for (var i = 0; i < arguments.length; i++) {
      total += arguments[i]
    }
    return total
}

未指定的类型参数默认为any

由于在Javascript中没有用于指定泛型类型参数的自然语法,因此未指定的类型参数默认为any。

在extends子句中:

例如,React.Component被定义为具有两个类型参数,Props和State。在.js文件中,没有合法的方法在extends子句中指定它们。默认情况下,类型参数将是any:

import { Component } from "react";

class MyComponent extends Component {
    render() {
        this.props.b; // Allowed, since this.props is of type any
    }
}

使用JSDoc @augments明确指定类型。例如:

import { Component } from "react";

/**
 * @augments {Component<{a: number}, State>}
 */
class MyComponent extends Component {
    render() {
        this.props.b; // Error: b does not exist on {a:number}
    }
}

在JSDoc引用中

JSDoc中的未指定类型参数默认为any:

/** @type{Array} */
var x = [];

x.push(1);        // OK
x.push("string"); // OK, x is of type Array<any>


/** @type{Array.<number>} */
var y = [];

y.push(1);        // OK
y.push("string"); // Error, string is not assignable to number

在函数调用中

对泛型函数的调用使用参数来推断类型参数。有时这个过程无法推断任何类型,主要是因为缺乏推理源;在这些情况下,类型参数将默认为any。例如:

var p = new Promise((resolve, reject) => { reject() });

p; // Promise<any>;

未完待续…

转载于:https://my.oschina.net/zhangdapeng89/blog/2254500

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107227.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • hexdump用法_linux dump命令

    hexdump用法_linux dump命令本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。作者:fireaxe_hq@hotmail.com博客:fireaxe.blog.chinaunix.net转自:http://blog.chinaunix.net/uid-20528014-id-4087756.html开发时经常会…

    2022年9月21日
  • Pycharm和Pytorch安装教程配置环境以及遇到的问题:

    Pycharm和Pytorch安装教程配置环境以及遇到的问题:Pycharm和Pytorch安装教程配置环境以及遇到的问题:注意:我们每次新建完项目,都要检查一下python解释器和conda.exe是否选择正确。一.如何找到Anconda哪个环境中安装了pytorch?Anconda提供环境,我们安装pytorch也是在一个环境下,所以不是在每个环境中都能用pytorch。那么我们如何找到我们pytorch安装的环境呢?要有NVDIA的显卡,才能用CUDA(AMD的小伙伴可能泪目了),查CUDA的版本比较简单,就不总结了。打开Anconda,输入conda

    2022年8月27日
  • Golang洗牌算法「建议收藏」

    Golang洗牌算法「建议收藏」简介主要思路为每次随机挑选一个值,放在数组末尾。然后在n-1个元素的数组中再随机挑选一个值,放在数组末尾,以此类推。注意,一定要设置随机种子,否则每次返回的值是一样的。codefuncshuffle(nums[]int)[]int{ rand.Seed(time.Now().UTC().UnixNano()) fori:=len(nums);i>0;i–{…

    2022年9月21日
  • MNIST是什么(plist是什么意思)

    初始的迷茫我想很多菜鸟和我一样,开始零基础学习机器学习,没办法火啊,为了钱大家都是冲呀。估计很多人开始学习ML,就一头雾水,完全不知道在说什么。因为学习模式和学习其他语言完全不同,我们知道学习其他语言的时候,第一个程序就是打印“HelloWorld”。其实机器学习是在某个框架下,使用某种语言,来解决问题。因此对于零基础的菜鸟而言,我们需要先学习好某种语言,可以推荐Python,因为功能强…

    2022年4月17日
  • windows环境搭建web服务器(IIS)

    windows环境搭建web服务器(IIS)windows环境下如何搭建web服务器,百度或者谷歌一下都会有很多教程和资源可以参考。这里我也记载一下过程,便于大家参考。至于什么是web服务器,为什么需要web服务器,这里不太明白的也可以百度一下。简单的说就是需要一个能够处理HTTP协议的互联网程序,当做好一个网站后将其放在这个程序包里。如果指定了这个程序所在电脑的IP地址,就可以用浏览器来显示这个网站了。通常这个程序所在的电脑位置我们称之为…

    2022年5月22日
  • git分支合并及冲突解决

    git分支合并及冲突解决

    2021年10月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号