TS中的类型推断太基础了,或者不是吗?

时间:2017-04-03 07:29:02

标签: typescript

以下是代码:

<?php
session_start();
require_once "pdo.php";

// Validate field entries
if ( isset($_POST['first_name']) && isset($_POST['last_name']) && isset($_POST['summary'])) {


    $sql = "INSERT INTO profile (first_name, last_name, summary)
               VALUES (:first_name, :last_name, :summary)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(
        ':first_name' => $_POST['first_name'],
        ':last_name' => $_POST['last_name'],
        ':summary' => $_POST['summary']
        ));
    $_SESSION['success'] = "Record added";
    header("Location: index.php");
    return;
} 

?>

<!DOCTYPE html>
<html>
<head>
<title>Add</title>
</head>
<body>

 <div class="container">

    <form method="post">
        <p>First Name:
        <input type="text" name="first_name" /></p>
        <p>Last Name:
        <input type="text" name="last_name" /></p>
        <p>Summary:
        <textarea type="text" name="summary"></textarea></p>
        <input type="submit" value="Add">
        <input type="submit" name="logout" value="Cancel">
    </form>

</div>
</body>
</html>

首次使用时不会推断出类型。

在Haxe:

var a; // it is typed "any". 
a = 33; // No inference
a = true; // compiles without errors.

我做错了吗?是否可以在TypeScript中执行此操作?

据我所知,这是不可能的。所以这个问题对于所有OCaml或Haxe开发人员来说都是一个很好的警告:你应该在TS中立即初始化你的变量

2 个答案:

答案 0 :(得分:3)

我认为从功能观点到任何习惯推理的人来说,期望实际上是相当有效的。我相信JLRishe会同意像F#这样的语言有适当的推理,或者至少我知道它们比Typescript更进一步,但我相信它会与其他核心功能语言有所不同。

https://technet.microsoft.com/en-us/sysinternals/dd233180(v=vs.102) '类型推断的想法是你不必指定F#构造的类型,除非编译器无法最终推断出类型。'

Haxe有一个非常聪明的编译器,像F#,Ocaml等...在完全输入打字方面具有非常强大的功能倾向。我认为从功能语言的角度来看,只能将打字稿视为播放脚本,除非这样的细节得到改善,这是对Javascript的巨大改进,但实际上它与Haxe或F#在感染和打字方面并不相同。据说现实是更多人使用的是Typescript,所以在Angular2项目中使用Haxe是非常辛苦的。

然而,我确实非常同意假设语言相似并且推理的含义在所有编程语言之间明显不同是错误的,通常最好做测试以查看哪些有效,特别是当您尝试新语言时,大多数编程语言都是一旦你习惯了它们就太神奇了。

但是我不觉得这个问题不应该被投票,因为它的基调是正确的,在推理方面,打字稿可以做得更好,问题是检查他的假设是否真的正确,因为构建版本中的回归或新版本的改进 所有活跃的语言都可以使用。

答案 1 :(得分:-1)

  

我做错了吗?

在声明变量时推断TypeScript中的类型,而不是在之后。你做错了什么是期望在事后推断它们。

  

如何让TS真正推断出类型?

这样做:

var a = 33; 
a=true; // error