typescript-tutorial icon indicating copy to clipboard operation
typescript-tutorial copied to clipboard

对象的类型——接口

Open xcatliu opened this issue 4 years ago • 26 comments

https://ts.xcatliu.com/basics/type-of-object-interfaces.html

xcatliu avatar Jun 08 '20 12:06 xcatliu

哈哈,编号89757的彩蛋可还行~

ms300 avatar Jun 16 '20 07:06 ms300

@ms300 哈哈,编号89757的彩蛋可还行~

暴露年龄了 : )

xcatliu avatar Jun 16 '20 11:06 xcatliu

9527不也是

peter-gong avatar Jun 18 '20 07:06 peter-gong

happy

fpGHwd avatar Jun 22 '20 00:06 fpGHwd

这篇总结的很好

Volcano-Yang avatar Jun 22 '20 01:06 Volcano-Yang

在3.9.3中,如果同时存在任意属性、可选属性,那么任意属性的数据类型要带undefined

fengliang2011 avatar Jul 14 '20 02:07 fengliang2011

果然,跟js还是有挺大区别的

Frank-1000 avatar Aug 25 '20 06:08 Frank-1000

@fengliang2011 在3.9.3中,如果同时存在任意属性、可选属性,那么任意属性的数据类型要带undefined

是的,或者可以修改任意属性的类型为 any

pluswhite avatar Sep 06 '20 13:09 pluswhite

接口里的属性用什么隔开啊?我用了逗号,分号,什么都不加,都不报错

aipdx avatar Oct 10 '20 09:10 aipdx

写的太好了,描述言简意骇 通俗意懂,看了官网文档好几遍感觉不好理解,看下这里就明白的差不多了,支持!!

yhysir avatar Oct 15 '20 14:10 yhysir

需要注意的是,一旦定义了任意属性,那么同一个接口内其他所有的属性,都只能和任意属性的类型一样,否则将会报错

chenle19 avatar Oct 22 '20 08:10 chenle19

@aipdx 接口里的属性用什么隔开啊?我用了逗号,分号,什么都不加,都不报错

都可以 我实测也不报错

weiweidong1993 avatar Nov 08 '20 04:11 weiweidong1993

ts小白学习中,简单易懂,谢谢老铁

sjqw avatar Nov 12 '20 03:11 sjqw

如何关闭TS2322,这个错误一包导致项目都不运行了,只是类型错误搞得这么严重?

lanceMe avatar Nov 19 '20 05:11 lanceMe

@lanceMe 如何关闭TS2322,这个错误一包导致项目都不运行了,只是类型错误搞得这么严重?

把tsconfig里面的noEmitOnError选项改成false试试?

Lisianthus-A avatar Nov 20 '20 09:11 Lisianthus-A

可以的

wensiyuanseven avatar Nov 28 '20 04:11 wensiyuanseven

写的很好,点赞

East-Apollo avatar Dec 01 '20 06:12 East-Apollo

大白的理解:接口里定义了基础属性,可选属性,任意属性,只读属性。基础属性约束了形状;可选属性在属性后加问号,表示可选;任意属性采用中括号进行定义string类型的属性;只读属性在属性前加readonly,不能被写

bree323 avatar Dec 03 '20 14:12 bree323

接口和对象长得好像,要不是那个分号,我都以为是对象了

bree323 avatar Dec 03 '20 14:12 bree323

上例中,任意属性的值允许是 string,但是可选属性 age 的值却是 number,number 不是 string 的子属性,所以报错了。

lzzqwe avatar Dec 15 '20 01:12 lzzqwe

interface Person { name: string; age?: number; [propName: string]: string | number; }

let tom: Person = { name: 'Tom', age: 25, gender: 'male' }; 这个age属性是可选的,可能为undefined类型

zb-0819 avatar Dec 15 '20 05:12 zb-0819

@ms300 哈哈,编号89757的彩蛋可还行~

模仿人类的机器~

Aslantoe avatar Dec 21 '20 07:12 Aslantoe

@aipdx 接口里的属性用什么隔开啊?我用了逗号,分号,什么都不加,都不报错

个人理解 以前写js 代码报错 是因为不符合 eslint 不报错 1.校验规则 2.他的语法标准 并没有觉得有问题

ggg1it avatar Feb 02 '21 06:02 ggg1it

其实最后一个例子中 其实也不能说 存在 因为在赋值的时候 tom 初始化 对象中不存在 id 就已经会报错了 也就不会再看 tom.id = 89757; 这个赋值了

ggg1it avatar Feb 02 '21 09:02 ggg1it

接口的內文描述:

定義的變數比介面少了一些屬性是不允許的: 多一些屬性也是不允許的: 可見,賦值的時候,變數的形狀必須和介面的形狀保持一致。

但事實上官網明明是允許的? https://www.typescriptlang.org/docs/handbook/interfaces.html

but the compiler only checks that at least the ones required are present and match the types required

tooilxui avatar Feb 15 '21 10:02 tooilxui

@zb-0819 interface Person { name: string; age?: number; [propName: string]: string | number; }

let tom: Person = { name: 'Tom', age: 25, gender: 'male' }; 这个age属性是可选的,可能为undefined类型

Demo在非strict模式下测试不报错,或者任意属性类型加上undefined.

ClishWang avatar Feb 24 '21 08:02 ClishWang