CNode

typescript 问题 求救

问答
Gganshiqingyuan发布于7 年前最后回复7 年前5 回复5564 浏览0 收藏

先贴代码

const testDto:Array<{dd:Array<{ddd:string}>}> = [{dd:[await Promise.resolve({ddd:'123',asd:456})]}]
const testDto2:Array<{dd:Array<{ddd:string}>}> = [{dd:[{ddd:'123',asd:456}]}]

TIM图片20191206103757.png 两个测试dto 类型相同,为什么被promise 包裹后的 对象新增属性ts不会提示多属性,,没被包裹的会提示,,

但是如果缺少属性两者都会提示缺少,很怪,,,

 const testDto:Array<{dd:Array<{ddd:string}>}> = [{dd:[await Promise.resolve({ddd3:'123',asd:456})]}]
 const testDto2:Array<{dd:Array<{ddd:string}>}> = [{dd:[{ddd:'123',asd:456}]}]

TIM图片20191206104510.png

求救,,, 我想做的是,nest 中定义好返回数据类型dto 定好之后在构造返回数据时,如果多数据少数据都会被提示,,然而用了promise后,,多数据不提示了,,很难受。。。

更新问题,写个简化版

const testDto:{dd:string} = {dd:'123',ss:123}
const testDto2:{dd:string} = await Promise.resolve({dd:'123',ss:123})
const testDto3:Promise<{dd:string}> = Promise.resolve({dd:'123',ss:123})

TIM图片20191206104510.png

查看回复

回复 (5)

J
justjavac#1·7 年前

不奇怪,本来就是这样的。因为 Promiseinterface

定义变量并且初始化的时候,所有的属性都需要匹配,多了也不行,少了也不行。

const testDto: { dd: string } = { dd: "123", ss: 123 };
// error TS2322: Type '{ dd: string; ss: number; }' is not assignable to type '{ dd: string; }'.
// Object literal may only specify known properties, and 'ss' does not exist in type '{ dd: string; }'.

const testDto: { dd: string, ss: number } = { dd: "123" };
// error TS2741: Property 'ss' is missing in type '{ dd: string; }' but required in type '{ dd: string; ss: number; }'.

但是当赋值时,多的可以赋值给少的,反之则不行。

let testDto1 = { dd: "123", ss: 123 };
let testDto2 = { dd: "123" };

testDto1 = testDto2  // 错误
testDto2 = testDto1  // 正确

错误提示:

error TS2741: Property 'ss' is missing in type '{ dd: string; }' but required in type '{ dd: string; ss: number; }'.

J
justjavac#2·7 年前

const testDto:{dd:string} = {dd:'123',ss:123} 是变量初始化 const testDto2:{dd:string} = await Promise.resolve({dd:'123',ss:123}) 是变量定义和赋值

J
justjavac#3·7 年前

const testDto:{dd:string} = {dd:'123',ss:123} 报错。你试一下:

const tmp = { dd: "123", ss: 123 };
const testDto: { dd: string } = tmp;
G
ganshiqingyuan#4·7 年前
引用 justjavacconst testDto:{dd:string} = {dd:'123',ss:123} 报错。你试一下:

@justjavac const testDto:{dd:string} = (function(){return {dd:'123',dd2:'456'}})()

这样也报错,

G
ganshiqingyuan#5·7 年前
引用 justjavacconst testDto:{dd:string} = {dd:'123',ss:123} 报错。你试一下:

@justjavac 跟promise 没什么关系,好像是和你说的初始化和赋值的区别有关系

参与回复
登录后即可参与回复。登录