【问题标题】:TypeScript in React application instead of ES6?React 应用程序中的 TypeScript 而不是 ES6?
【发布时间】:2019-09-21 13:52:03
【问题描述】:

我已经看到人们决定使用 TypeScript 而不是 ES6 的 React 项目和示例。想知道使用 ES6 无法实现什么,而通过使用 TypeScript 和 React 来实现?

【问题讨论】:

    标签: reactjs typescript ecmascript-6 redux react-redux


    【解决方案1】:

    想知道使用 ES6 无法实现什么,而使用 TypeScript 和 React 可以实现吗?

    类型安全?。 TypeScript 提供 编译时间 类型检查,这是 ES6 / Pure JavaScript 不提供的:http://www.typescriptlang.org/ / Why TypeScript

    【讨论】:

    • 话虽如此,如果你将checkJS 切换为true,并且在VS Code 中有一个jsconfig.json 文件,你还可以在Javascript 中获得类型检查和智能感知,你可以使用.d.ts 文件.当然 TS 和 JS 之间还有一些其他的区别。
    • 感谢大家的回复。是的,我的印象是 TypeScript 在编译期间提供类型安全,这也可以在 ESX 版本中实现。除此之外,我认为没有什么大的好处。有时,开发者的个人喜好会根据技能等...
    【解决方案2】:

    我相信您知道,ES6 是 javascript 的附加功能。 Typescript 是 javascript 的超集,也实现了这些功能。如果你也想通过 typescript 来利用 ES7 的特性,你可以配置它来做到这一点。所以 Typescript 和 ESX 是独立的。正如 Basarat 所说,Typescript 为您提供的是编译时类型检查:一种在代码中定义类型的能力和符号。为了描绘它的使用方式,这里有一个人为的例子。如果您有来自 api 的数据...

    type Category = "Kitchen" | "Hardware" | "Linens";
    
    //dont know exactly what users[n].about looks like yet
    type Data = {
      users: {name: string, id: string, about: any}[];
      products: {name: string, id: string: category: Category}[];
    }
    
    export async function getUsers() {
      const data: Data = await fetch.get('localhost:3000/api');
      return data.users.map(u => u.name);
    }
    

    这里有很多好处。

    1. 在编写 data.users.map 时,我的 IDE 知道 users 是一个数组,并为我建议数组函数。
    2. 如果我尝试对数组执行非数组函数,我的 IDE 会给我一条红线。
    3. 当我写这部分 u => u.name 时,我的 IDE 会知道 U 的类型,并为我自动建议 u.name 和 u.id
    4. 如果我尝试输入除这两个属性之外的其他内容,我的 IDE 会给我一个红线错误。我不需要 console.log 来仔细检查是否有错别字。

    此外,如果我尝试创建函数addProduct,我也可以提取Product 的类型定义并再次使用它,如下所示:

    export function addProduct(product: Product) {
      data.products.push(product);
    }
    

    ...如果您尝试使用该函数,但不使用上面Category 中定义的字符串之一,您也会收到错误消息!

    addProducts({name: "Missile Launcher", id: "Boom10001", Category: "Artillary"});
    

    【讨论】:

    • 感谢兄弟的详细信息,不胜感激。但我猜想,所有与 IDE 相关的好处都可以使用各种插件来实现。所以,总的来说,我认为只有类型相关的好处,除了这是开发人员的个人偏好。
    • 通过插件带来的 IDE 好处通常是可能的,因为插件试图进行某种类型的推断。它并不总是准确的,如果你没有明确地告诉它你正在使用什么/从模块中导出什么,它通常无法猜测。关于整体效用,我的经验法则是,如果我构建任何需要维护的非平凡尺寸的东西,它几乎总是值得 IMO 额外的麻烦。
    • 啊,我完全错过了你关于反应的问题。 TS 在 React 中实际上非常好。您使用类型而不是 proptypes。您还可以获得 IDE 错误通知的额外好处,而不是运行时。例如,您使用 typescript 说明您的组件具有需要名称和 id 的 props,仅此而已:当您尝试使用该组件时,您将在 IDE 中收到任何额外或缺少的 props 的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2021-05-23
    • 2021-07-13
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多