强行上 TS,就自寻烦恼,体会不到他们说的 TS 带来的乐趣,各种波浪线懵逼中?

2023-03-16 15:40:59 +08:00
 tlerbao

大致代码如下

// * 请求响应参数(不包含 data)
export interface Result {
	code: string;
	message: string;
}

// * 请求响应参数(包含 data)
export interface ResultData<T = any> extends Result {
	data: T;
}


// 封装的 post 请求
post<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> {
	return this.service.post(url, params, _object);
}

// 具体请求
export const previewCode = (params: any) => {
	return http.post(`/generate/preview`, params);
};

前面是基本定义,下面是使用的问题

就根据我这种情况,在实际调用中,要如何不写成 anyscrip ,显然 const { data }:{data:any} 就不会报错了,但是规范的做法是怎样的呢?const { data }:{data:string} 又会报另一个错误:

TS2322: Type 'ResultData<unknown>' is not assignable to type '{ data: string; }'. Types of property 'data' are incompatible.      Type 'unknown' is not assignable to type 'string'.

const preview = async (type: any) => {
	const { data } = await previewCode(post);
	previewContent.value = data;
    // 波浪线,鼠标放这行会提示 TS2322: Type 'unknown' is not assignable to type 'string'.
};

到底怎么做才比较规范

2590 次点击
所在节点    问与答
24 条回复
wyl986
2023-03-17 08:59:52 +08:00
用 ts 写,一个是你很久之后再来维护很有信心,即使没有充分的单元测试,你也知道写的是个什么东西,二是代码提示会好很多,三个是确实能在写的时候找到一些 js 不容易找到的问题。习惯了 ts 之后确实更喜欢用 ts 一些,虽然刚开始确实各种波浪线,还要写得比 js 多多了

ps:尽可能不要用 any ,any 一般是用在那种 js 写的第三方包上面,而不是你自己的代码上面
duan602728596
2023-03-17 13:52:55 +08:00
interface Result {
code: string;
message: string;
}


interface ResultData<T = unknown> extends Result {
data: T;
}

function post<T>(url: string, params?: Record<string, any>, _object = {}): Promise<ResultData<T>> {
return this.service.post(url, params, _object);
}

const previewCode = (params: any): Promise<ResultData<string>> => {
return post<string>(`/generate/preview`, params);
};

const preview = async (type: any) => {
const { data }: { data: string } = await previewCode(post);
let previewContent;
previewContent.value = data;
};

稍微改了一下
PrtScScrLk
2023-03-17 14:12:11 +08:00
@siknet 所以是什么 TS ,我想知道!
siknet
2023-03-17 14:36:19 +08:00
@PrtScScrLk #23 “TS” 可以指“transsexual”的缩写,而“transsexual”则是指性别认同障碍( Gender Identity Disorder ,GID )的一种,这是指一个人认为自己的生理性别与其内心认同的性别不符,并希望通过医疗手段改变生理性别。但是,这个术语已经被逐渐取代,现在更常用的是“性别确认”( gender affirmation )或“性别变异”( gender variance )。


俗称:变性人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX