定义参数类型的方法有两种:type
,interface
两种方法有什么区别?
interface
: 只能代表一个对象。interface Teacher{}
type
:代表一个类型。type Teacher : array
规范:如果能用interface
表述一个类型,就用interface
,实在不行再用类型type
interface各个类型使用方法
interface Teacher{
name:string //字符串
age:number //数字
hobby: Array<number> //全部为数子的数组
sayHello(): string // 函数,返回string
[propName]:any // 除了定义外的参数可任意添加参数
a?: string // 可有可无
readonly b:string // 只可以读,不可以改
}
使用过程中可能会产生的问题
以字面量
形式传递参数,在没有定义age参数的情况下会
报错
image.png
以变量
的形式传递,在没有定义age参数的情况下不会
报错
image.png
产生这个现象的原因是:当以字面量
形式传递时typescript会对参数进行强校验
变量
传递参数时,不会特别严格。
interface
可以定义一个函数方法
say():string // 返回一个string 类型的方法
当类
应用了接口implements
,则必须写入接口规定的所有参数
interface Teacher {
name: string
}
class User implements Teacher {
// name:'mtg'
}
报错
image.png
继承接口extends
image.png
报错,这是继承后父类和子类的参数均包含在内
image.png
interface
可以定义方法
interface SayHi{
(Word:string):string
}
使用
interface SayHi {
(word: string): any
}
const say: SayHi = (word) => {
console.log(word)
}
say('你好')
编译结果是什么样的呢
tsc demo.TS
编译后interface 都会被提出掉,只是为了编译是有提示