定義參數(shù)類型的方法有兩種:type
咽笼,interface
兩種方法有什么區(qū)別?
interface
: 只能代表一個(gè)對(duì)象暖释。interface Teacher{}
type
:代表一個(gè)類型袭厂。type Teacher : array
規(guī)范:如果能用interface
表述一個(gè)類型,就用interface
球匕,實(shí)在不行再用類型type
interface各個(gè)類型使用方法
interface Teacher{
name:string //字符串
age:number //數(shù)字
hobby: Array<number> //全部為數(shù)子的數(shù)組
sayHello(): string // 函數(shù)纹磺,返回string
[propName]:any // 除了定義外的參數(shù)可任意添加參數(shù)
a?: string // 可有可無(wú)
readonly b:string // 只可以讀,不可以改
}
使用過(guò)程中可能會(huì)產(chǎn)生的問(wèn)題
以字面量
形式傳遞參數(shù)谐丢,在沒(méi)有定義age參數(shù)的情況下會(huì)
報(bào)錯(cuò)
image.png
以變量
的形式傳遞爽航,在沒(méi)有定義age參數(shù)的情況下不會(huì)
報(bào)錯(cuò)
image.png
產(chǎn)生這個(gè)現(xiàn)象的原因是:當(dāng)以字面量
形式傳遞時(shí)typescript會(huì)對(duì)參數(shù)進(jìn)行強(qiáng)校驗(yàn)
變量
傳遞參數(shù)時(shí),不會(huì)特別嚴(yán)格乾忱。
interface
可以定義一個(gè)函數(shù)方法
say():string // 返回一個(gè)string 類型的方法
當(dāng)類
應(yīng)用了接口implements
讥珍,則必須寫入接口規(guī)定的所有參數(shù)
interface Teacher {
name: string
}
class User implements Teacher {
// name:'mtg'
}
報(bào)錯(cuò)
image.png
繼承接口extends
image.png
報(bào)錯(cuò),這是繼承后父類和子類的參數(shù)均包含在內(nèi)
image.png
interface
可以定義方法
interface SayHi{
(Word:string):string
}
使用
interface SayHi {
(word: string): any
}
const say: SayHi = (word) => {
console.log(word)
}
say('你好')
編譯結(jié)果是什么樣的呢
tsc demo.TS
編譯后interface 都會(huì)被提出掉窄瘟,只是為了編譯是有提示