Typescript 是不是;使用“严格的”;在文件的第一行中,是否影响文件中的所有函数?

Typescript 是不是;使用“严格的”;在文件的第一行中,是否影响文件中的所有函数?,typescript,tslint,Typescript,Tslint,因此,为了便于学习,我对以下代码进行了改编: "use strict"; /// <reference path="./definitelyTyped/node/node.d.ts" /> import * as net from "net"; let sockets: net.Socket[] = []; /* * Cleans the input of carriage return, newline */ fu

因此,为了便于学习,我对以下代码进行了改编:

"use strict";
/// <reference path="./definitelyTyped/node/node.d.ts" />
import * as net from "net";

let sockets: net.Socket[] = [];

/*
 * Cleans the input of carriage return, newline
 */
function cleanInput(data: Buffer): string {
    return data.toString().replace(/(\r\n|\n|\r)/gm, "");
}

/*
 * Method executed when data is received from a socket
 */
function receiveData(socket: net.Socket, data: Buffer): void {
    let cleanData: string = cleanInput(data);
    if (cleanData === "@quit") {
        socket.end("Goodbye!\r\n");
    } else {
        for (var i: number = 0; i < sockets.length; i++) {
            if (sockets[i] !== socket) {
                sockets[i].write(data);
            }
        }
    }
}

/*
 * Method executed when a socket ends
 */
function closeSocket(socket: net.Socket): void {
    let i: number = sockets.indexOf(socket);
    if (i !== -1) {
        sockets.splice(i, 1);
    }
}

/*
 * Callback method executed when a new TCP socket is opened.
 */
function newSocket(socket: net.Socket): void {
    sockets.push(socket);
    socket.write("Welcome to the Telnet server!\r\n");
    socket.on("data", function(data: Buffer): void {
        receiveData(socket, data);
    });
    socket.on("end", function(): void {
        closeSocket(socket);
    });
}

// create a new server and provide a callback for when a connection occurs
let server: net.Server = net.createServer(newSocket);

// listen on port 4444
server.listen(4444);
console.log("started");
“严格使用”;
/// 
从“net”导入*作为net;
let sockets:net.Socket[]=[];
/*
*清除回车符、换行符的输入
*/
函数输入(数据:缓冲区):字符串{
返回data.toString().replace(/(\r\n |\n |\r)/gm,“”);
}
/*
*从套接字接收数据时执行的方法
*/
函数receiveData(套接字:net.socket,数据:Buffer):void{
让cleanData:string=cleanInput(数据);
如果(cleanData==“@退出”){
socket.end(“再见!\r\n”);
}否则{
对于(变量i:number=0;i
我在这个文件上运行这些规则

这就是我得到的:

app.ts[10,1]:缺少“严格使用”

应用程序ts[17,1]:缺少“严格使用”

附录ts[33,1]:缺少“严格使用”

应用程序ts[43,1]:缺少“严格使用”


我的理解是,
“使用字符串”应该是整个文件的全局代码。然而,每个函数都会产生一条消息。我遗漏了什么吗?

可以在全局范围或单个功能中启用严格模式:

// Enable strict mode globally
"use strict";
var v = "This script is in strict mode.";
或本地:

function strict() {
  'use strict';

  function nested() {
    return "Nested function is also in strict mode.";
  }

  return "Function is in strict mode. " + nested();
}

function notStrict() {
  return "This function is not in strict mode.";
}
我的理解是“使用字符串”;在文件的第一行,应该是整个文件的全局。然而,每个函数都会产生一条消息


你的理解是正确的。但是,您要求tslint确保所有功能都能使用它,并使用
“检查功能”
。将其设置为false,因为如果已启用模块级别,则不需要该选项。

换句话说,此示例文件中的默认值没有实际意义?为两个级别启用该选项的一个原因是为了在连接中实现安全性。请参阅:我想知道typescript是否对连接有特殊处理。编译器可以选择将所有内容捆绑到单个文件中,因此,如果他们认为您会感到惊讶,那么这是合乎逻辑的:omg!原子弹,嗯?需要再试一次。。。现在一定已经成熟了。至于连接,如果两者都打开了,有什么特殊的场景会得到改进?就我所知,为了连接的目的,您的代码需要关闭严格文件上的严格函数,然后连接似乎是安全的。如果另一个代码依赖于不严格,那么在这两个代码都打开的情况下,您仍然有问题。