typescript-tutorial icon indicating copy to clipboard operation
typescript-tutorial copied to clipboard

声明文件

Open xcatliu opened this issue 4 years ago • 22 comments

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

xcatliu avatar Jun 08 '20 12:06 xcatliu

感谢作者大大

Skeanmy avatar Aug 18 '20 06:08 Skeanmy

把这里最长的给看完了

Mryang119 avatar Oct 04 '20 09:10 Mryang119

感谢作者

leochenup avatar Oct 05 '20 14:10 leochenup

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

tomwang1013 avatar Oct 10 '20 07:10 tomwang1013

没看懂。。二刷

lcfzblcfzb avatar Oct 10 '20 10:10 lcfzblcfzb

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

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

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

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

xcatliu avatar Oct 12 '20 02:10 xcatliu

@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还不一样?

tomwang1013 avatar Oct 12 '20 05:10 tomwang1013

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

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

xcatliu avatar Oct 12 '20 05:10 xcatliu

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

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

tomwang1013 avatar Oct 20 '20 02:10 tomwang1013

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

xcatliu avatar Oct 20 '20 03:10 xcatliu

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

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

tomwang1013 avatar Oct 20 '20 03:10 tomwang1013

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

tomwang1013 avatar Oct 20 '20 06:10 tomwang1013

@lcfzblcfzb 没看懂。。二刷

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

weiweidong1993 avatar Nov 08 '20 09:11 weiweidong1993

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

sunq0001 avatar Nov 12 '20 16:11 sunq0001

优秀,学习了

samgu1219 avatar Nov 30 '20 08:11 samgu1219

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

xuhongliWeb avatar Dec 02 '20 05:12 xuhongliWeb

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

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

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

tomwang1013 avatar Apr 07 '21 03:04 tomwang1013

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

tomwang1013 avatar Apr 08 '21 03:04 tomwang1013

干货

nikolausliu avatar Dec 16 '21 08:12 nikolausliu

nikolausliu avatar Dec 16 '21 08:12 nikolausliu

@nikolausliu

nikolausliu avatar Dec 16 '21 08:12 nikolausliu

test

nikolausliu avatar Dec 16 '21 09:12 nikolausliu