-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
[RFC] TypeScript tool support #2272
Comments
ts-node 锁版本的,tsc 版本不匹配,可能有坑。。。 |
egg-bin 提供一个使用 ts-node 的 tsc?我还不清楚具体差异。 |
@popomore 具体指? 我想的是,fork 一个 ts-node 然后去掉它的 lock,这样可以直接用 tsc 的最新版 |
我在想,ts 的那些拓展能力没有写到官方文档里的,只是写在了 wiki 中,是不是意味着不是稳定的,我觉得 ts-node 的作者是不是担心 ts 某个版本突然把某个 api 改掉了,就 break 了,所以才把版本给锁了 |
但起码要更新吧。 或者提个 PR 帮他把 lock 更新到最新吧 其实我觉得更有可能是他升级了 npm5 后,无意识的加了 package-lock |
看错了。。。 ts-node 没有带 tsc 的,那是 dev dep。 |
|
更新正文,补充背景和思路 |
|
|
@waitingsong 没看懂, |
@atian25 我的意思是假如有模块函数 function add(a: number, b: number): number {
return a + b;
} 如果基于 TS 开发,那么不用检查 a/b 的类型。并且在用 TS 写的测试用例里面也无法测试非数字类型参数情况 it('should add workds', () => {
assert(add('1', 2) === 3) // <----- VSC 会直接报类型错误的
}) 但是假如存在调用模块的开发语言不是 TS 的情况,那么就需要在 add() 函数内做类型检查或者转换。那么产生 if/else 分支在跑 cov 里面就会有 missing 。于是又只有加上忽略注释
挺头疼的…… |
有个问题:
貌似是 |
如果把 // for config.{env}.ts
export type DefaultConfig = PowerPartial<EggAppConfig & BizConfig> 改成 export type DefaultConfig = EggAppConfig & BizConfig 就不会有上面的错误。 |
@waitingsong 感觉不像是 declaration 的问题?我本机试了一下设置 declaretion 为 true,没有出现你所述的错误,提供个稳定复现的项目看看? |
我是在 egg-example/hacknews-async-ts 这个目录里面遇到这个问题的 |
是基于那个例子修改后遇到的。等我今天确认下复现 |
@whxaxes |
最小复现代码 config.default.ts export interface Config {
keys: string
news: {
pageSize: number;
};
}
export type PowerPartial<T> = {
[U in keyof T]?: T[U] extends {}
? PowerPartial<T[U]>
: T[U]
}
// for config.{env}.ts
export type DefaultConfig = PowerPartial<Config>; config.local.ts import { DefaultConfig } from './config.default';
export default () => {
const config: DefaultConfig = {};
config.keys = 'foo'
return config;
}; |
如果把 export interface Config {
keys: string
news: {
pageSize: number;
};
} 删除 news 对象为 export interface Config {
keys: string
// news: {
// pageSize: number;
// };
} 就没问题 |
如果把 config.local.ts 的内容复制到 config.default.ts 然后删除 config.local.ts,也不会报错 |
@atian25 ts模板的schedule无法使用啊 |
@lindraco 可以用,我已经在用了。 //typings/index.d.ts
import Sequelize from 'sequelize';
declare module 'egg' {
// 扩展 app
interface Application {
Sequelize: Sequelize;
model: Sequelize.Sequelize;
}
// 扩展 context
interface Context {
Sequelize: Sequelize;
model: Sequelize.Sequelize;
}
// 扩展你的配置
interface EggAppConfig {
sequelize: {
dialect: string;
database: string;
host: string;
port: string;
username: string;
password: string;
};
}
} 简单点的话也可以用any @atian25 顺便求审pr https://github.com/eggjs/egg-sequelize/#47 |
这个 RFC 可以关了, tegg 那边回头 @popomore 另起 |
OK
TZ | 天猪 <[email protected]>于2018年4月12日 周四下午3:25写道:
… Closed #2272 <#2272>.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2272 (comment)>, or mute the
thread
<https://github.com/notifications/unsubscribe-auth/AAWA1bXEIYioLKds4keJuSbUGJCdGVPTks5tnwFagaJpZM4S7HwF>
.
|
@shangyu95 sequelize、mongo也无法使用,egg-ts-helper只监听了固定的4个目录 🤥 |
上次看到死马的采访说egg不会使用ts重写,tegg 使用 ts 重写版本么? |
不会用Ts重写egg内核,没有意义。 |
不会,tegg 只是一个上层框架。 Egg 至少一年内没有重写的计划,没有什么特别的好处。 |
@yaonote 入口文件?说说你遇到的问题吧 |
理解了,打扰了~~~~~~ |
@unclexiao 没有搁浅,目前 egg 已经可以使用 ts 了,tegg 只是一个依赖注入方案的 egg 上层封装框架,目前还没空做而已。 |
背景
当前使用 TypeScript 开发 Egg ,会面临的影响开发者体验问题:
app/service/news.ts
会自动挂载为ctx.service.news
。config.{env}.js
里面修改插件提供的配置时,能校验并智能提示?tsc -w
独立进程来构建代码,带来临时文件位置纠结以及npm scripts
复杂化。思路
事项
--require
: fix: --require node-modules/common-bin#21egg.typescript
: feat: support egg.typescript egg-bin#92ts-node 的 tsc 版本d.ts
- egg-ts-helper : https://github.com/whxaxes/egg-ts-helper后续
以下内容不属于本期内容,仅做备忘,后续跟进
The text was updated successfully, but these errors were encountered: