首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript又结合了*.js + *.d.ts?

TypeScript又结合了*.js + *.d.ts?
EN

Stack Overflow用户
提问于 2018-07-31 04:10:19
回答 1查看 161关注 0票数 1

TypeScript tsc -d“声明”的"compilerOptions“生成相应的'.d.ts‘文件。

例如,来自:

tmp.ts

代码语言:javascript
复制
const log = (m: unknown) => {
    console.log((m)); 
    return m;
};

它产生:

tmp.js

代码语言:javascript
复制
const log = (m) => {
    console.log((m));
    return m;
};

以及:

tmp.d.ts

代码语言:javascript
复制
declare const log: (m: unknown) => unknown;

我认为这非常有趣,因为它将TypeScript源代码与本机JavaScript代码和额外的类型定义“分离”。

那么,我的想法是。在划分了本机代码和类型定义之后,是否可以通过重新绑定两个代码来生成有效的TypeScript代码?

例如:

tmp-reunion.ts

代码语言:javascript
复制
declare const log1: (m: unknown) => unknown;

const log1 = m => {
    console.log((m)); 
    return m;
};

此代码生成一个错误:

代码语言:javascript
复制
[ts] Cannot redeclare block-scoped variable 'log1'.

每次陈述。

我为什么要这么做?

我的动机是事实:

  1. 在代数里, (x^2 + 3x +2) = (x+1)(x+2) = (x^2 + 3x +2)

我想确认同一件事在TypeScript下是否有效。

  1. 特别有趣的是,TypeScript将类型化源代码编译为普通的JavaScript代码,其类型信息作为输出完全被丢弃。

从某种意义上说,这一事实使我认为,在TypeScirpt中,普通JS代码的输出是类型安全和有效的,只是没有*.d.ts文件--这似乎只是TypeScript编译器利用的额外助手功能。只是个工具。

因此,普通JS代码的类型安全性可以稍后使用助手函数工具,即TypeScript编译器,即tmp.d.ts轻松地进行验证。这就是我想确认的。

如何使TypeScript再次结合*.js + *.d.ts?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-07-31 04:25:44

因此,普通JS代码的类型安全性可以稍后使用助手函数工具,即TypeScript编译器,即tmp.d.ts轻松地进行验证。

这在一般情况下是不正确的,因为您已经丢失了函数体内部的任何手动类型注释,这些注释是验证那些类型记录类型推断功能不够强大的函数体所必需的。对于一个人为的例子(当然,假设是noImplicitAny ):

代码语言:javascript
复制
function duplicateEach<T>(arr: T[]) { 
    let out: T[] = [];
    arr.forEach(t => { out.push(t); out.push(t); });
    return out;
}

如果删除out上的注释,代码就不会编译,因为类型记录的不断演变的数组类型推断不会遍历到回调中。如果我们查看.d.ts.js,这两个注释都不会出现在它们中:

代码语言:javascript
复制
declare function duplicateEach<T>(arr: T[]): T[];

function duplicateEach(arr) {
    var out = [];
    arr.forEach(function (t) { out.push(t); out.push(t); });
    return out;
}

要获得更实际的示例,请查看任何非平凡的TypeScript代码基。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51605331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档