先贴代码
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}]}]
两个测试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}]}]
求救,,, 我想做的是,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})
不奇怪,本来就是这样的。因为 Promise
是 interface
。
定义变量并且初始化的时候,所有的属性都需要匹配,多了也不行,少了也不行。
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; }’.
const testDto:{dd:string} = {dd:'123',ss:123}
是变量初始化
const testDto2:{dd:string} = await Promise.resolve({dd:'123',ss:123})
是变量定义和赋值
const testDto:{dd:string} = {dd:'123',ss:123}
报错。你试一下:
const tmp = { dd: "123", ss: 123 };
const testDto: { dd: string } = tmp;
@justjavac
const testDto:{dd:string} = (function(){return {dd:'123',dd2:'456'}})()
这样也报错,
@justjavac 跟promise 没什么关系,好像是和你说的初始化和赋值的区别有关系