Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

typescript 使用问题记录 #44

Open
toxic-johann opened this issue Feb 23, 2018 · 0 comments
Open

typescript 使用问题记录 #44

toxic-johann opened this issue Feb 23, 2018 · 0 comments

Comments

@toxic-johann
Copy link
Owner

toxic-johann commented Feb 23, 2018

使用 paths

在 tsc 中使用十分简单,在 tsconfig.json 中的 compileOptions 上添加 paths 即可。

{
  "compileOnSave": true,
  "compilerOptions": {
    "paths": {
      "@my-types/*": [ "@my-types/*" ]
    }
  },
}

但是 webpack 下不认这个,所以这个时候引入 tsconfig-paths-webpack-plugin 到 webpack resolve 中。

操作配置按照文档操作

这时候编译会成功吗,但 tslint 可能会报 warning 如下图。

这个是由 no-implicit-dependencies 引起的。

如果没啥必要的话,关掉这个规则。

引入自定义 .d.ts

给第三方插件写 .d.ts。写了几个,想统一放在一个自定义的 types 中引入,但是查阅资料发现。

typeRoots are only used to resolve /// directives. if you want to import it, then just use baseUrl or add a path mapping entry. you do not need typeRoots in this case.

换言之, typeroots 没有卵用,自己引入 .d.ts 吧

尝试使用 import 引入会报以下错误,应该是触发了 ts-loader 的一个 bug

引入方式如下:

import '@my-types/link-hijacker.d';
import { hyjack } from '@mapbox/link-hijacker';

使用如下方式可以引入不出错,但看起来很恶心。

/// <reference path='../../@my-types/link-hijacker.d.ts' />
import { hyjack } from '@mapbox/link-hijacker';

解决方法如下:

在 tsconfig.json 中直接用 files 引入所需要的 .d.ts

{
  "files": [
    "@my-types/link-hijacker.d.ts"
  ]
}

vscode 神烦的 "experimentalDecorators"

日常性被提醒 "experimentalDecorators" 错误。

很多人都会搜索到要在 tsconfig.json 上添加如下描述:

{
  "compilerOptions": {
    "experimentalDecorators": true
  }
}

但是发现每个项目都加了都没用,但是各种开发者都无法复现

那是因为这个东西需要添加在 vscode 打开的目录的最外层才有作用。

例如你打开的 workspace ,里面有很多项目。请现在 workspace 上添加 tsconfig.json,输入以上语句。问题解决。

eslintignore 不生效

因为我们用了 ts 所以希望 eslint 不要再审查我们的 js。但是在 vscode 上添加 eslintignore 被忽略了。

和 tsconfig.json 一样也要在最外层目录添加一个 .eslintignore

typescirpt narrow down 的方法

https://medium.com/@OlegVaraksin/narrow-interfaces-in-typescript-5dadbce7b463

将一个 union type 的数据变化为单个

创造一个 string 不能赋值的 string

export type graphNodeId = string & { isGraphNodeId: boolean };

这样子帮助我们可以勒令其他开发者必须进行一次转型。

我们创造出的这个 graphNodeId, 他本质还是 string,但是如果有地方要求 graphNodeId,你不能普通的使用 string 插入。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant