xcatliu / typescript-tutorial

TypeScript 入门教程
https://ts.xcatliu.com
10.44k stars 1.33k forks source link

声明文件 #160

Open xcatliu opened 4 years ago

xcatliu commented 4 years ago

https://ts.xcatliu.com/basics/declaration-files.html

Skeanmy commented 4 years ago

感谢作者大大

Mryang119 commented 4 years ago

把这里最长的给看完了

leochenup commented 4 years ago

感谢作者

tomwang1013 commented 4 years ago

namespace中的字段需要加export才能被外面访问到吧?例子中没有加,请问是不是错误呢?

lcfzblcfzb commented 4 years ago

没看懂。。二刷

xcatliu commented 4 years ago

@tomwang1013 namespace中的字段需要加export才能被外面访问到吧?例子中没有加,请问是不是错误呢?

文中的所有代码都是经过了验证的,可以把仓库 clone 下来在 vscode 中看看 https://github.com/xcatliu/typescript-tutorial/tree/master/examples/declaration-files/17-export-namespace

namespace中的字段需要加export才能被外面访问到吧?

你可能是在写 ts 模块,而不是在写 .d.ts 声明文件。

tomwang1013 commented 4 years ago

@tomwang1013 namespace中的字段需要加export才能被外面访问到吧?例子中没有加,请问是不是错误呢?

文中的所有代码都是经过了验证的,可以把仓库 clone 下来在 vscode 中看看 https://github.com/xcatliu/typescript-tutorial/tree/master/examples/declaration-files/17-export-namespace

namespace中的字段需要加export才能被外面访问到吧?

你可能是在写 ts 模块,而不是在写 .d.ts 声明文件。

首先谢谢回复!难道声明文件中的namespace和模块中的namespace还不一样?

xcatliu commented 4 years ago

首先谢谢回复!难道声明文件中的namespace和模块中的namespace还不一样?

@tomwang1013 根据我的亲测,确实如此

tomwang1013 commented 4 years ago

关于全局变量声明和npm声明有个问题:你提到typescript会自动扫描项目中所有的.ts.d.ts文件,文件中的declare声明会变成全局变量声明。这样如果你的npm文件也在工程源码中(即自己写的或为第三方写的声明),那里面的declare也会变成全局的了,不用export也能用了。那这句话:

在 npm 包的声明文件中,使用 declare 不再会声明一个全局变量,而只会在当前文件中声明一个局部变量 岂不是有矛盾?

xcatliu commented 4 years ago

@tomwang1013 准确来说,只要 .ts.d.ts 文件中有 importexport,那么这个文件中的 declare 就会变成局部变量。

tomwang1013 commented 4 years ago

@tomwang1013 准确来说,只要 .ts.d.ts 文件中有 importexport,那么这个文件中的 declare 就会变成局部变量。

了解,那反之就会变成全局变量?

tomwang1013 commented 4 years ago

export namespace已经不推荐使用了: https://www.typescriptlang.org/docs/handbook/modules.html#red-flags

weiweidong1993 commented 4 years ago

@lcfzblcfzb 没看懂。。二刷

感觉这段可以跳过了 不是开发看的 是从设计的角度来梳理的

sunq0001 commented 4 years ago

import { name, getName, Animal, Directions, Options } from 'foo'; 在这个案例中,我按照教程的目录结构,以及拷贝相同代码,还有tsconfig.json ,结果运行报错: Error: Cannot find module 'foo'

samgu1219 commented 3 years ago

优秀,学习了

xuhongliWeb commented 3 years ago

看了很多便, 比官网清晰。 赞

tomwang1013 commented 3 years ago

当我们import一个npm包时,在本地新建一个types目录存放它的声明文件,你提到需要配置paths:

"paths": {
            "*": ["types/*"]
        }

但是paths我理解是用来做模块本身的查找的而不是模块的声明文件的查找,这是特殊规则吗?如果有官方文档提到这个可以贴一下吗?谢谢!

tomwang1013 commented 3 years ago

请问自动生成的声明文件(保持了目录层级)和整个npm包导出的声明文件(index.d.ts或types字段指示的文件)有啥区别呢?使用者只能使用(通过import)index.d.ts中的类型而不能使用自动生成的声明文件中的类型吗?

nikolausliu commented 2 years ago

干货

nikolausliu commented 2 years ago
nikolausliu commented 2 years ago
@nikolausliu
nikolausliu commented 2 years ago

test