人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

帶你聊聊typeScript中的extends關(guān)鍵字

來源:php中文網(wǎng) | 2023-02-13 19:56:21 |

extends是 typeScript 中的關(guān)鍵字。在 typeScript 的類型編程世界里面,它所扮演的角色實(shí)在是太重要了,所以,我們不得不需要重視它,深入學(xué)習(xí)它。在我看來,掌握它就是進(jìn)入高級(jí) typeScript 類型編程世界的敲門磚。但是,現(xiàn)實(shí)是,它在不同的上下文中,具體不同的,相差很大的語義。如果沒有深入地對(duì)此進(jìn)行梳理,它會(huì)給開發(fā)者帶來很大的困惑。梳理并深入學(xué)習(xí)它,最后掌握它,這就是我編寫這篇文章的初衷。


【資料圖】

extends 的幾個(gè)語義

讓我們開門見山地說吧,在 typeScript 在不同的上下文中,extends有以下幾個(gè)語義。不同語義即有不同的用途:

用于表達(dá)類型組合;用于表達(dá)面向?qū)ο笾小割悺沟睦^承用于表達(dá)泛型的類型約束;在條件類型(conditional type)中,充當(dāng)類型表達(dá)式,用于求值。

extends 與 類型組合/類繼承

extends可以跟 interface結(jié)合起來使用,用于表達(dá)類型組合。

示例 1-1

interface ChildComponentProps {    onChange: (val: string)=> void}interface ParentComponentProps extends ChildComponentProps {    value: string}

在 react 組件化開發(fā)模式中,存在一種自底向上的構(gòu)建模式 - 我們往往會(huì)先把所有最底層的子組件的 props構(gòu)建好,最后才定義 container component(負(fù)責(zé)提升公共 state,聚合和分發(fā) props) 的 props。此時(shí),inferface 的 extends正好能表達(dá)這種語義需求 - 類型的組合(將所有子組件的 props聚合到一塊)。

當(dāng)然,interfaceextends從句是可以跟著多個(gè)組合對(duì)象,多個(gè)組合對(duì)象之間用逗號(hào),隔開。比如ParentComponentProps組合多個(gè)子組件的 props

示例 1-2

interface ChildComponentProps {    onChange: (val: string)=> void}interface ChildComponentProps2 {    onReset: (value: string)=> void}interface ParentComponentProps extends ChildComponentProps, ChildComponentProps2 {    value: string}

注意,上面指出的是「多個(gè)組合對(duì)象」,這里也包括了Class。對(duì),就是普通面向概念中的「類」。也就是說,下面的代碼也是合法的:

示例 1-3

interface ChildComponentProps {    onChange: (val: string)=> void}interface ChildComponentProps2 {    onReset: (value: string)=> void}class SomeClass {    private name!: string // 變量聲明時(shí),變量名跟著一個(gè)感嘆號(hào)`!`,這是「賦值斷言」的語法    updateName(name:string){        this.name = name || ""    }}interface ParentComponentProps extendsChildComponentProps,ChildComponentProps2,SomeClass {    value: string}

之所以這也是合法的,一切源于一個(gè)特性:在 typeScript 中,一個(gè) class 變量既是「值」也是「類型」。在interface extends class的上下文中,顯然是取 class 是「類型」的語義。一個(gè) interface extends另外一個(gè) class,可以理解為 interface 拋棄這個(gè) class 的所有實(shí)現(xiàn)代碼,只是跟這個(gè) class 的「類型 shape」 進(jìn)行組合。還是上面的示例代碼中,從類型 shape 的角度,SomeClass就等同于下面的 interface:

示例 1-4

interface SomeClass {   name: string   updateName: (name:string)=> void}

好了,以上就是 extends關(guān)鍵字的「類型組合」的語義。事情開始發(fā)生了轉(zhuǎn)折。

如果某個(gè) interface A 繼承了某個(gè) class B,那么這個(gè) interface A 還是能夠被其他 interface 去繼承(或者說組合)。但是,如果某個(gè) class 想要 implements這個(gè) interface A,那么這個(gè) class 只能是 class B 本身或者 class B 的子類。

示例 1-5

class Control {   private state: any;  constructor(intialValue: number){    if(intialValue > 10){      this.state = false    }else {      this.state = true    }  }  checkState(){    return this.state;  }}interface SelectableControl extends Control {  select(): void;}// 下面的代碼會(huì)報(bào)錯(cuò):Class "DropDownControl" incorrectly implements interface// "SelectableControl".// Types have separate declarations of a private property "state".(2420)class DropDownControl  implements SelectableControl {  private state = false;  checkState(){    // do something  }  select(){    // do something  }}

要想解決這個(gè)問題,class DropDownControl必須要繼承 Controlclass 或者Controlclass 的子類:

示例 1-6

class Control {   private state: any;  constructor(intialValue: number){    if(intialValue > 10){      this.state = false    }else {      this.state = true    }  }  checkState(){    return this.state;  }}interface SelectableControl extends Control {  select(): void;}// 下面的代碼就不會(huì)報(bào)錯(cuò),且能得到預(yù)期的運(yùn)行結(jié)果class DropDownControl  extends Control  implements SelectableControl {  // private state = false;  //checkState(){    // do something  //}  select(){    // do something  }}const dropDown = new DropDownControl(1);dropDown.checkState(); // OkdropDown.select(); // Ok

上面這個(gè)示例代碼扯出了 extends關(guān)鍵字的另外一個(gè)語義 - 「繼承」。當(dāng)extends用于 typeScript 的類之間,它的準(zhǔn)確語義也就是 ES6 中面向?qū)ο笾小竐xtends」關(guān)鍵字的語義。AClass extends BClass不再應(yīng)該解讀為「類型的組合」而是面向?qū)ο缶幊讨械摹窤Class 繼承 BClass」和「AClass 是父類 BClass 的子類」。與此同時(shí),值得指出的是,此時(shí)的 extends關(guān)鍵字是活在了「值的世界」, 遵循著 ES6 中 extends關(guān)鍵字一樣的語義。比較顯著的一點(diǎn)就是,ts 中的 extends也是不能在同一時(shí)間去繼承多個(gè)父類的。比如,下面的代碼就會(huì)報(bào)錯(cuò):

示例 1-7

class A {}class B {}// 報(bào)錯(cuò): Classes can only extend a single class.(1174)class C extends A,B {}

關(guān)于具有「繼承」語義的 extends更多行為特性的闡述已經(jīng)屬于面向?qū)ο缶幊谭妒降姆懂犃?,這里就不深入討論了,有興趣的同學(xué)可以自行去了解。

至此,我們算是了解 extends關(guān)鍵字跟 interfaceclass結(jié)合起來所表達(dá)的兩種不同的語義:

類型的組合面向?qū)ο蟾拍钪小割惖睦^承」

接下來,我們看看用于表達(dá)泛型類型約束的 extends

extends 與類型約束

更準(zhǔn)確地說,這一節(jié)是要討論 extends跟泛型形參結(jié)合時(shí)候的「類型約束」語義。在更進(jìn)一步討論之前,我們不妨先復(fù)習(xí)一下,泛型形參聲明的語法以及我們可以在哪些地方可以聲明泛型形參。

具體的泛型形參聲明語法是:

標(biāo)識(shí)符后面用尖括號(hào)<>包住一個(gè)或者多個(gè)泛型形參

多個(gè)泛型形參用,號(hào)隔開

泛型新參的名字可以隨意命名(我們見得最多就是使用單個(gè)英文字母T,U之類的)。

在 typeScript 中,我們可以在以下地方去聲明一個(gè)泛型形參。

在普通的函數(shù)聲明中:
function dispatch<A>(action: A): A {    // Do something}
在函數(shù)表達(dá)式形態(tài)的類型注解中:
const dispatch: <A>(action: A)=> A =  (action)=> {  return action}// 或者interface Store { dispatch: <A>(action: A)=> A}
interface的聲明中:
interface Store<S> { dispatch: <A>(action: A)=> A reducer: <A>(state: S,action: A)=> S}
class的聲明中:
class GenericAdd<AddableType> {  zeroValue!: AddableType;  add!: (x: AddableType, y: AddableType) => AddableType;}let myGenericNumber = new GenericNumber<number>();myGenericNumber.zeroValue = 0;myGenericNumber.add = function (x, y) {    return x + y;};
在自定義類型聲明中:
type Dispatch<A>=(action:A)=> A
在類型推導(dǎo)中:typeScript // 此處,F(xiàn) 和 Rest 就是泛型形參 type GetFirstLetter<S> = S extends `${infer F extends `${number}`}${infer Rest}` ? F : S; 以上就是簡單梳理后的可以產(chǎn)生泛型形參的地方,可能還有疏漏,但是這里就不深入發(fā)掘了。

下面重點(diǎn)來了 - 凡是有泛型形參的地方,我們都可以通過 extends來表達(dá)類型約束。這里的類型約束展開說就是,泛型形參在實(shí)例化時(shí)傳進(jìn)來的類型實(shí)參必須要滿足我們所聲明的類型約束。到這里,問題就來了,我們該怎樣來理解這里的「滿足」呢?在深究此問題之前,我們來看看類型約束的語法:

`泛型形參` extends `某個(gè)類型`

為了引出上面所說「滿足」的理解難題,我們不妨先看看下面的示例的代碼:

示例 2-1

// case 1type UselessType<T extends number> = T;type Test1 = UselessType<any> // 這里會(huì)報(bào)錯(cuò)嗎?type Test1_1 = UselessType<number|string> // 這里會(huì)報(bào)錯(cuò)嗎?// case 2type UselessType2<T extends {a:1, b:2}> = T;type Test2 = UselessType2<{a:1, b:2, c:3}> // 這里會(huì)報(bào)錯(cuò)嗎?type Test2_1 = UselessType2<{a:1}> // 這里會(huì)報(bào)錯(cuò)嗎?type Test2_2 = UselessType2<{[key:string]: any}> // 這里會(huì)報(bào)錯(cuò)嗎?type Test2_3 = {a:1, b:2} extends  {[key:string]: any} ? true : false// case 3class BaseClass {    name!: string}class SubClass extends  BaseClass{    sayHello!: (name: string)=> void}class SubClass2 extends  SubClass{    logName!: ()=> void}type UselessType3<T extends SubClass> = T;type Test3 = UselessType3<{name: "鯊叔"}> // 這里會(huì)報(bào)錯(cuò)嗎?type Test3_1 = UselessType3<SubClass> // 這里會(huì)報(bào)錯(cuò)嗎?type Test3_2 = UselessType3<BaseClass> // 這里會(huì)報(bào)錯(cuò)嗎?

不知道讀者朋友們在沒有把上述代碼拷貝到 typeScript 的 playground 里面去驗(yàn)證之前你是否能全部猜中。如果能,證明你對(duì) extends在類型約束的語義上下文中的行為表現(xiàn)已經(jīng)掌握的很清楚了。如果不能,請?jiān)试S我為你娓娓道來。

相信有部分讀者了解過 typeScript 的類型系統(tǒng)的設(shè)計(jì)策略。由于 js 是一門動(dòng)態(tài)弱類型的腳本語言,再加上需要考慮 typeScript 與 js 的互操性和兼容性。所以, typeScript 類型系統(tǒng)被設(shè)計(jì)為一個(gè)「structural typing」系統(tǒng)(結(jié)構(gòu)化類型系統(tǒng))。所謂的結(jié)構(gòu)化類型系統(tǒng)的一個(gè)顯著的特點(diǎn)就是 - 具有某個(gè)類型 A 的值是否能夠賦值給另外一個(gè)類型 B 的值的依據(jù)是,類型 A 的類型結(jié)構(gòu)是否跟類型 B 的類型結(jié)構(gòu)是否兼容。而類型之間是否兼容看重的類型的結(jié)構(gòu)而不是類型的名字。再說白一點(diǎn),就是 B 類型有的屬性和方法,你 A 類型也必須有。到這里,就很容易引出一個(gè)廣為大眾接受的,用于理解類型「可賦值性」行為的心智模型,即:

用集合的角度去看類型。故而這里有「父集」和 「子集」的概念,「父集」包含 「子集」;

在 typeScript 的類型系統(tǒng)中, 子集類型是可以賦值給父集類型。

在泛型形參實(shí)例化時(shí),如果 extends前面的類型是它后面的類型的子集,那么我們就說當(dāng)前的實(shí)例化是「滿足」我們所聲明的類型約束的。

以下是 示例 2-1的運(yùn)行結(jié)果:

實(shí)際上,上面的那個(gè)心智模型是無法匹配到以上示例在 typeScript@4.9.4 上的運(yùn)行結(jié)果。以上面這個(gè)心智模型(子集類型能賦值給父集類型,反之則不然)來看示例的運(yùn)行結(jié)果,我們會(huì)有下面的直覺認(rèn)知偏差:

case 1 中,anynumber的父集,為什么它能賦值給 number類型的值?case 1 中,number | string應(yīng)該是 number的父集,所以,它不能賦值給 number類型的值。case 1 中,number & string應(yīng)該是 number的父集,按理說,這里應(yīng)該報(bào)錯(cuò),但是為什么卻沒有?case 2 中,{a:1}{a:1,b:2}的子集,按理說,它能賦值給 {a:1,b:2}類型的值啊,為什么會(huì)報(bào)錯(cuò)?case 3 中,感覺{name: "鯊叔"}SubClass的子集,按理說,它能賦值給 SubClass類型的值啊,為什么會(huì)報(bào)錯(cuò)?case 3 中,感覺BaseClassSubClass的子集,按理說,它能賦值給 SubClass類型的值啊,為什么會(huì)報(bào)錯(cuò)?

經(jīng)過反復(fù)驗(yàn)證和查閱資料,正確的認(rèn)知如下:

case 1 中,any是任何類型的子集,也是任何類型的父集。這里 typeScript 往寬松方向去處理,即取 number的子集之意;number | string之所以不能賦值給 number,并不是因?yàn)?number | stringnumber的父集,而是因?yàn)槁?lián)合類型遇到 extends關(guān)鍵字所產(chǎn)生的「分配律」的結(jié)果。即是因?yàn)?number|string extends number的結(jié)果等于 (number extend number) | (string extends number)的結(jié)果。顯然,(number string extends number的值是 false的,所以,整個(gè)類型約束就不滿足;對(duì)象類型的類型不能采用 子集類型 extends 父集類型 = true的心智模型來理解。而是得采用 父集類型 extends 子集類型 = true。與此同時(shí),當(dāng)子集類型中有明確字面量 key-value 對(duì)的時(shí)候,父集類型中也必須需要有。否則的話,就是不可賦值給子集類型。number & string應(yīng)該被視為對(duì)象類型的類型,遵循上面一條的規(guī)則。

基于上面的正確認(rèn)知,我們不妨把我們的心智模型修正一下:

應(yīng)該使用「父類型」和「子類型」的概念去理解滿足類型約束背后所遵循的規(guī)則;在類型約束 AType extends BType中,如果 ATypeBType的子類型,那么我們就會(huì)說 AType是滿足我們所聲明的類型約束的;根據(jù)下面的 「ts 類型層級(jí)關(guān)系圖」來判斷兩種類型的父-子類型關(guān)系:

關(guān)于上面這張圖,有幾點(diǎn)可以單獨(dú)拿出來強(qiáng)調(diào)一下:

any無處不在。它既是任何類型的子類型,也是任何類型的父類型,甚至可能是任意類型自己。所以,它可以賦值給任何類型;{}充當(dāng) typeScript 類型的時(shí)候,它是有特殊含義的 - 它對(duì)應(yīng)是(Object.prototype.__proto__)=null在 js 原型鏈上的地位,它被視為所有的對(duì)象類型的基類。array的字面量形式的子類型就是tuple,function的字面量形式的子類型就是函數(shù)表達(dá)式類型。tuple函數(shù)表達(dá)式類型都被囊括到 字面量類型中去。

現(xiàn)在我們用這個(gè)新的心智模型去理解一下 示例 2-1報(bào)錯(cuò)的地方:

type Test1_1 = UselessType<number|string>之所以報(bào)錯(cuò),是因?yàn)樵陬愋图s束中,如果 extends前面的類型是聯(lián)合類型,那么要想滿足類型約束,則聯(lián)合類型的每一個(gè)成員都必須滿足類型約束才行。這就是所謂的「聯(lián)合類型的分配律」。顯然,string extends number是不成立的,所以整個(gè)聯(lián)合類型就不滿足類型約束;對(duì)于對(duì)象類型的類型 - 即強(qiáng)調(diào)由屬性和方法所組成的集合類型,我們需要先用面向?qū)ο蟮母拍顏泶_定兩個(gè)類型中,誰是子類,誰是父類。這里的判斷方法是 - 如果 A 類型相比 B 類型多出了一些屬性/方法的話(這也同時(shí)意味著 B 類型擁有的屬性或者方法,A 類型也必須要有),那么 A 類型就是父類,B 類型就是子類。然后,我們再轉(zhuǎn)換到子類型和父類型的概念上來 - 父類就是「父類型」,子類就是「子類型」。type Test2_1 = UselessType2<{a:1}> 之所以報(bào)錯(cuò),是因?yàn)?code>{a:1}是{a:1, b:2}的父類型,所以是不能賦值給{a:1, b:2};{[key:string]: any}并不能成為 {a:1, b:2}的子類型,因?yàn)?,父類型有的屬?方法,子類型必須顯式地?fù)碛小?code>{[key:string]: any}沒有顯式地?fù)碛校?,它不?{a:1, b:2}的子類型,而是它的父類型。type Test3 = UselessType3<{name: "鯊叔"}>type Test3_2 = UselessType3<BaseClass> 報(bào)錯(cuò)的原因也是因?yàn)橐驗(yàn)槿鄙倭讼鄳?yīng)的屬性/方法,所以,它們都不是SubClass的子類型。

到這里,我們算是剖析完畢。下面總結(jié)一下。

當(dāng) extends緊跟在泛型形參后面時(shí),它是在表達(dá)「類型約束」的語義;在 AType extends BType中,只有 ATypeBType的子類型,ts 通過類型約束的檢驗(yàn);面對(duì)兩個(gè) typeScript 類型,到底誰是誰的子類型,我們可以根據(jù)上面給出的 「ts 類型層級(jí)關(guān)系圖」來判斷。而對(duì)于一些充滿迷惑的邊緣用例,死記硬背即可。

extends 與條件類型

眾所周知,ts 中的條件類型就是 js 世界里面的「三元表達(dá)式」。只不過,相比值世界里面的三元表達(dá)式最終被計(jì)算出一個(gè)「值」,ts 的三元表達(dá)式最終計(jì)算出的是「類型」。下面,我們先來復(fù)習(xí)一下它的語法:

AType extends BType ?  CType :  DType

在這里,extends關(guān)鍵字出現(xiàn)在三元表達(dá)的第一個(gè)子句中。按照我們對(duì) js 三元表達(dá)式的理解,我們對(duì) typeScript 的三元表達(dá)式的理解應(yīng)該是相似的:如果 AType extends BType為邏輯真值,那么整個(gè)表達(dá)式就返回 CType,否則的話就返回DType。作為過來人,只能說,大部分情況是這樣的,在幾個(gè)邊緣 case 里面,ts 的表現(xiàn)讓你大跌眼鏡,后面會(huì)介紹。

跟 js 的三元表達(dá)式支持嵌套一樣,ts 的三元表達(dá)式也支持嵌套,即下面也是合法的語法:

AType extends BType ?  (CType extends DType ? EType : FType) : (GType extends HType ? IType : JType)

到這里,我們已經(jīng)看到了 typeScript 的類型編程世界的大門了。因?yàn)?,三元表達(dá)式本質(zhì)就是條件-分支語句,而后者就是邏輯編輯世界的最基本的要素了。而在我們進(jìn)入 typeScript 的類型編程世界之前,我們首要搞清楚的是,AType extends BType何時(shí)是邏輯上的真值。

幸運(yùn)的是,我們可以復(fù)用「extends 與類型約束」上面所產(chǎn)出的心智模型。簡而言之,如果 ATypeBType的子類型,那么代碼執(zhí)行就是進(jìn)入第一個(gè)條件分支語句,否則就會(huì)進(jìn)入第二個(gè)條件分支語句。

上面這句話再加上「ts 類型層級(jí)關(guān)系圖」,我們幾乎可以理解AType extends BType99% 的語義。還剩下 1% 就是那些違背正常人直覺的特性表現(xiàn)。下面我們重點(diǎn)說說這 1% 的特性表現(xiàn)。

extends 與 {}

我們開門見山地問吧:“請說出下面代碼的運(yùn)行結(jié)果?!?/p>

type Test = 1 extends {} ? true : false // 請問 `Test` 類型的值是什么?

如果你認(rèn)真地去領(lǐng)會(huì)上面給出的「ts 類型層級(jí)關(guān)系圖」,我相信你已經(jīng)知道答案了。如果你是基于「鴨子辯型」的直觀理解去判斷,那么我相信你的答案是true。但是我的遺憾地告訴你,在 typeScript@4.9.4中,答案是false。這明顯是違背人類直覺的。于是乎,你會(huì)有這么一個(gè)疑問:“字面量類型 1{}類型似乎牛馬不相及,既不形似,也不神似,它怎么可能是是「字面量空對(duì)象」的子類型呢?”

好吧,就像我們在上一節(jié)提過的,{}在 typeScript 中,不應(yīng)該被理解為字面量空對(duì)象。它是一個(gè)特殊存在。它是一切有值類型的基類。ts 對(duì)它這么定位,似乎也合理。因?yàn)楹魬?yīng)了一個(gè)事實(shí) - 在 js 中,一切都是對(duì)象 (字面量 1在 js 引擎內(nèi)部也是會(huì)被包成一個(gè)對(duì)象 - Number()的實(shí)例)。

現(xiàn)在,你不妨拿別的各種類型去測試一下它跟 {}的關(guān)系,看看結(jié)果是不是跟我說的一樣。最后,有一個(gè)注意點(diǎn)值的強(qiáng)調(diào)一下。假如我們忽略無處不在,似乎是百變星君的 any{}的父類型只有一個(gè) - unknown。不信,我們可以試一試:

type Test = unknown extends {} ? true : false // `Test` 類型的值是 `false`

Test2類型的值是 false,從而證明了unknown{}的父類型。

extends 與 any

也許你會(huì)覺得,extendsany有什么好講得嘛。你上面不是說了「any」既是所有類型的子類型,又是所有類型的父類型。所以,以下示例代碼得到的類型一定是true:

type Test = any extends number ? true : false

額......在 typeScript@4.9.4 中, 結(jié)果似乎不是這樣的 - 上面示例代碼的運(yùn)行結(jié)果是boolean。這到底是怎么回事呢?這是因?yàn)?,?typeScript 的條件類型中,當(dāng)any出現(xiàn)在 extends前面的時(shí)候,它是被視為一個(gè)聯(lián)合里類型。這個(gè)聯(lián)合類型有兩個(gè)成員,一個(gè)是extends后面的類型,一個(gè)非extends后面的類型。還是用上面的示例舉例子:

type Test = any extends number ? true : false// 其實(shí)等同于type Test = (number | non-number) extends number ? true : false// 根據(jù)聯(lián)合類型的分配率,展開得到type Test = (number extends number ? true : false) | (non-number extends number ? true : false)          = true | false          = boolean// 不相信我?我們再來試一個(gè)例子:type Test2 = any extends number ? 1 : 2// 其實(shí)等同于type Test2 = (number | non-number) extends number ? 1 : 2// 根據(jù)聯(lián)合類型的分配率,展開得到type Test = (number extends number ? 1 : 2) | (non-number extends number ? 1 : 2)          = 1 | 2

也許你會(huì)問,如果把 any放在后面呢?比如:

type Test = number extends any ? true : false

這種情況我們可以依據(jù) 「任意類型都是any的子類型」得到最終的結(jié)果是true。

關(guān)于 extends 與 any 的運(yùn)算結(jié)果,總結(jié)一下,總共有兩種情況:

any extends SomeType(非 any 類型) ? AType : BType的結(jié)果是聯(lián)合類型 AType | BTypeSomeType(可以包含 any 類型) extends any ? AType : BType的結(jié)果是 AType

extends 與 never

在 typeScript 的三元表達(dá)式中,當(dāng) never遇見 extends,結(jié)果就變得很有意思了??梢該Q個(gè)角度說,是很奇怪。假設(shè),我現(xiàn)在要你實(shí)現(xiàn)一個(gè) typeScript utility 去判斷某個(gè)類型(不考慮any)是否是never的時(shí)候,你可能會(huì)不假思索地在想:因?yàn)?never是處在 typeScript 類型層級(jí)的最底層,也就是說,除了它自己,沒有任何類型是它的子類型。所以答案肯定是這樣:

type IsNever<T> = T extends never ? true : false

然后,你信心滿滿地給泛型形參傳遞個(gè)never去測試,你發(fā)現(xiàn)結(jié)果是never,而不是true或者false:

type  Test = IsNever<never> // Test 的值為 `never`, 而不是我們期待的  `true`

再然后,你不甘心,你寫下了下面的代碼去進(jìn)行再次測試:

type  Test = never extends never ? true : false // Test 的值為 `true`, 符合我們的預(yù)期

你會(huì)發(fā)現(xiàn),這次的結(jié)果卻是符合我們的預(yù)期的。此時(shí),你腦海里面肯定有千萬匹草泥馬奔騰而過。是的,ts 類型系統(tǒng)中,某些行為就是那么的匪夷所思。

對(duì)于這種違背直覺的特性表現(xiàn),當(dāng)前的解釋是:當(dāng) never充當(dāng)實(shí)參去實(shí)例化泛型形參的時(shí)候,它被看作沒有任何成員的聯(lián)合類型。當(dāng) tsc 對(duì)沒有成員的聯(lián)合類型執(zhí)行分配律時(shí),tsc 認(rèn)為這么做沒有任何意義,所以就不執(zhí)行這段代碼,直接返回 never

那正確的實(shí)現(xiàn)方式是什么???是這個(gè):

type IsNever<T> = [T] extends [never] ? true : false

原理是什么啊?答曰:「通過放入 tuple 中,消除了聯(lián)合類型碰上 extends時(shí)所產(chǎn)生的分配律」。

extends 與 聯(lián)合類型

上面也提到了,在 typeScript 三元表達(dá)中,當(dāng) extends前面的類型是聯(lián)合類型的時(shí)候,ts 就會(huì)產(chǎn)生類似于「乘法分配律」行為表現(xiàn)。具體可以用下面的示例來表述:

type Test = (AType | BType) extends SomeType ? "yes" : "no"          =  (AType extends SomeType ? "yes" : "no") | (BType extends SomeType ? "yes" : "no")

我們再來看看「乘法分配律」:(a+b)*c = a*c + b*c。對(duì)比一下,我們就是知道,三元表達(dá)式中的 |就是乘法分配律中的 +, 三元表達(dá)式中的 extends就是乘法分配律中的 *。下面是表達(dá)這種類比的偽代碼:

type Test = (AType + BType) * (SomeType ? "yes" : "no")          =  AType * (SomeType ? "yes" : "no") + BType * (SomeType ? "yes" : "no")

另外,還有一個(gè)很重要的特性是,當(dāng)聯(lián)合類型的泛型形參的出現(xiàn)在三元表達(dá)式中的真值或者假值分支語句中,它指代的是正在遍歷的聯(lián)合類型的成員元素。在編程世界里面,利用聯(lián)合類型的這個(gè)特性,我們可以遍歷聯(lián)合類型的所有成員類型。比如,ts 內(nèi)置的 utility Exclude<T,U>就是利用這種特性所實(shí)現(xiàn)的:

type  MyExclude<T,U>= T extends U ? never :  T; // 第二個(gè)條件分支語句中, T 指代的是正在遍歷的成員元素type Test = MyExclude<"a"|"b"|"c", "a"> // "b"|"c"

在上面的實(shí)現(xiàn)中,在你將類型實(shí)參代入到三元表達(dá)式中,對(duì)于第二個(gè)條件分支的T記得要理解為"a"|"b"|"c"的各個(gè)成員元素,而不是理解為完整的聯(lián)合類型。

有時(shí)候,聯(lián)合類型的這種分配律不是我們想要的。那么,我們該怎么消除這種特性呢?其實(shí)上面在講「extends 與 never 」的時(shí)候也提到了。那就是,用方括號(hào)[]包住 extends前后的兩個(gè)類型參數(shù)。此時(shí),兩個(gè)條件分支里面的聯(lián)合類型參數(shù)在實(shí)例化時(shí)候的值將會(huì)跟 extends子句里面的是一樣的。

// 具有分配律的寫法type ToArray<Type> = Type extends any ? Type[] : never; //type StrArrOrNumArr = ToArray<string | number>; // 結(jié)果是:`string[] | number[]`// 消除分配律的寫法type ToArrayNonDist<Type> = [Type] extends [any] ? Type[] : never;type StrArrOrNumArr2 = ToArray<string | number>; // 結(jié)果是:`(string | number)[]`

也許你會(huì)覺得 string[] | number[](string | number)[]是一樣的,我只能說:“客官,要不您再仔細(xì)瞧瞧?”。

extends 判斷類型嚴(yán)格相等

在 typeScript 的類型編程世界里面,很多時(shí)候我們需要判斷兩個(gè)類型是否是一模一樣的,即這里所說的「嚴(yán)格相等」。如果讓你去實(shí)現(xiàn)這個(gè) utility 的話,你會(huì)怎么做呢?我相信,不少人會(huì)跟我一樣,不假思索地寫下了下面的答案:

type  IsEquals<T,U>= T extends U ? U extends T ? true : false :  false

這個(gè)答案似乎是邏輯正確的。因?yàn)?,如果只有自己才可能既是自己的子類型也是自己的父類型。然后,我們用很多測試用例去測,似乎結(jié)果也都符合我們的預(yù)期。直到我們碰到下面的邊緣用例:

type  Test1= IsEquals<never,never> // 期待結(jié)果:true,實(shí)際結(jié)果: nevertype  Test2= IsEquals<1,any> // 期待結(jié)果:false,實(shí)際結(jié)果: booleantype  Test3= IsEquals<{readonly a: 1},{a:1}> // 期待結(jié)果:false,實(shí)際結(jié)果: true

沒辦法, typeScript 的類型系統(tǒng)有太多的違背常識(shí)的設(shè)計(jì)與實(shí)現(xiàn)了。如果還是沿用上面的思路,即使你把上面的特定用例修復(fù)好了,但是說不定還有其他的邊緣用例躲在某個(gè)陰暗的角度等著你。所以,對(duì)于「如何判斷兩個(gè) typeScript 類型是嚴(yán)格相等」的這個(gè)問題上,目前社區(qū)里面從 typeScript 實(shí)現(xiàn)源碼角度上給出了一個(gè)終極答案:

type IsEquals<X, Y> =      (<T>() => (T extends  X ? 1 : 2)) extends      (<T>() => (T extends  Y ? 1 : 2))      ? true      : false;

目前我還沒理解這個(gè)終極答案為什么是行之有效的,但是從測試結(jié)果來看,它確實(shí)是 work 的,并且被大家所公認(rèn)。所以,目前為止,對(duì)于這個(gè)實(shí)現(xiàn)只能是死記硬背了。

extends 與類型推導(dǎo)

type Test<A> = A extends SomeShape ? 第一個(gè)條件分支 : 第二支條件分支

當(dāng) typeScript 的三元表達(dá)式遇見類型推導(dǎo)infer SomeType, 在語法上是有硬性要求的:

infer只能出現(xiàn)在 extends子句中,并且只能出現(xiàn)在 extends關(guān)鍵字后面緊跟在 infer后面所聲明的類型形參只能在三元表達(dá)式的第一個(gè)條件分支(即,真值分支語句)中使用

除了語法上有硬性要求,我們也要正確理解 extends 遇見類型推導(dǎo)的語義。在這個(gè)上下文中,infer SomeType更像是具有某種結(jié)構(gòu)的類型的占位符。SomeShape中可以通過 infer來聲明多個(gè)類型形參,它們與一些已知的類型值共同組成了一個(gè)代表具有如此形態(tài)的SomeShape。而 A extends SomeShape 是我們開發(fā)者在表達(dá):「tsc,請按照顧我所聲明的這種結(jié)構(gòu)去幫我推導(dǎo)得出各個(gè)泛型形參在運(yùn)行時(shí)的值,以便供我進(jìn)一步消費(fèi)這些值」,而 tsc 會(huì)說:「好的,我盡我所能」。

「tsc 會(huì)盡我所能地去推導(dǎo)出具體的類型值」這句話的背后蘊(yùn)含著不少的 typeScript 未在文檔上交代的行為表現(xiàn)。比如,當(dāng)類型形參與類型值共同出現(xiàn)在「數(shù)組」,「字符串」等可遍歷的類型中,tsc 會(huì)產(chǎn)生類似于「子串/子數(shù)組匹配」的行為表現(xiàn) - 也就是說,tsc 會(huì)以非貪婪匹配模式遍歷整個(gè)數(shù)組/字符串進(jìn)行子串/數(shù)組匹配,直到匹配到最小的子串/子數(shù)組為止。這個(gè)結(jié)果,就是我們類型推導(dǎo)的泛型形參在運(yùn)行時(shí)的值。

舉個(gè)例子,下面的代碼是實(shí)現(xiàn)一個(gè)ReplaceOnce類型 utility 代碼:

type ReplaceOnce<  S extends string,  From extends string,  To extends string> = From extends ""  ? S  : S extends `${infer Left}${From}${infer Right}`  ? `${Left}${To}${Right}`  : S  “”type Test = Replace<"foobarbar", "bar", ""> // 結(jié)果是:“foobar”

tsc 在執(zhí)行上面的這行代碼「S extends ${infer Left}${From}${infer Right}」的時(shí)候,背后做了一個(gè)從左到右的「子串匹配」行為,直到匹配到所傳遞進(jìn)來的子串From為止。這個(gè)時(shí)候,也是 resolve 出形參LeftRight具體值的時(shí)候。

以上示例很好的表達(dá)出我想要表達(dá)的「當(dāng)extends跟類型推導(dǎo)結(jié)合到一塊所產(chǎn)生的一些微妙且未見諸于官方文檔的行為表現(xiàn)」。在 typeScript 高級(jí)類型編程中,善于利用這一點(diǎn)能夠幫助我們?nèi)ソ鉀Q很多「子串/子數(shù)組匹配」相關(guān)的問題。

總結(jié)

在 typeScript 在不同的上下文中,extends有以下幾個(gè)語義:

用于表達(dá)類型組合;用于表達(dá)面向?qū)ο笾小割悺沟睦^承用于表達(dá)泛型的類型約束;在條件類型(conditional type)中,充當(dāng)類型表達(dá)式,用于求值。

最值得注意的是,extends在條件類型中與其他幾個(gè)特殊類型結(jié)合所產(chǎn)生的特殊語義。幾個(gè)特殊類型是:

{}anynever聯(lián)合類型

【推薦學(xué)習(xí):javascript高級(jí)教程】

以上就是帶你聊聊typeScript中的extends關(guān)鍵字的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: TypeScript JavaScript

国产免费综合视频在线观看| 亚洲国产成人不卡av| 欧美精品素人在线观看| 得得的爱在线视频免费观看 | 黄色mv在线免费观看| 精品一片二片三片在线| 久久久久久狠狠亚洲综合| 很黄很色的视频免费在线观看| 青青河边草观看完整版高清| 精品国产专区91精品| 人妻精品在线观看一区二区三区| 欧美日韩精品成人在线| 午夜mm1314视频| 色一情一乱一乱一区91Av| 日本丝袜美腿在线观看| 日韩av在线日韩av日韩av | 欧美日韩一区二区三四| 韩国性感美女直播热舞| 久久精品国产高潮av| 成年网站在线视频免费| 欧美 日韩 成人 三级| 久久黃色特三片視頻視頻視視頻| 色偷偷av一区二区三区| 99视频精品视频观看| 在线观看国产视频播放| 国产欧美在线视频观看| 成人美女主播在线播放| 91性色福利在线视频| seseav在线观看| 男人和女人的性生活视频| 人妻巨乳中文字幕亚洲在线| 视频一区二区三区日韩欧美| 久久久久人妻一区精品在线观看| 日韩性感美女在线观看| 99热爱精品在线观看| 97在线视频中文字幕| 中文人妻一区二区熟女| 91黄页网站在线观看| 国产偷拍自拍在线免费| 久久国产精品av大全| 国内伦理视频在线观看| 中文字幕人妻少妇久久| 欧美女奴靠bb唆大鸡巴群交 | 在线观看黄色播放网站| 青青青青在线播放视频| 综合人妻一区二区三区| 成年人免费看国产黄色片| rct378在线中文字幕| 国产精品网站调教美女| 午夜精品久久久在线观看| 人人妻人人做人人妻av| 国产精品丝袜制服在线| 久久99av无色码人妻蜜柚| 人妻一区二区三区精品免费| 午夜av中文字幕在线观看| 久久99久久久久久久久| 97精品综合久久视频| 久久人妻一区二区精选| 天海翼一区二区三区免费| 免费的床上很黄不遮挡视频| 夜欲av无码精品一区二区| 欧美日韩一区 二区 三区| 久久久久久噜噜噜久久久精品 | 97人妻免费公开视频| 91在线成人在线视频| 国产美女扒开粉嫩尿口网站| 中文字幕在线视频首页| 啊哈怎么被那么多男生操| 欧美熟妇一级二级三级a| 可以看手机在线黄色视频网| 亚洲成人制服丝袜av| 天海翼一区二区三区免费| 熟女系列丰满熟妇一区二区三区| 男人女人40分钟视频| 免费播放黄色操逼乱操逼| 欧美激情高潮无遮挡男男| 日本免费精品一二三区| 久久亚洲精品国产日韩高潮| 日韩国产精品99久久久久久| 亚洲国产蜜臀系列在线观看| 色综合久久88色综合天| 国产精品人妻中文字幕| 97视频在线观看免费播放| 久久久久国产AV成人网| 免费人成在线观看视频高潮| 国产福利在线播放视频| 明星性感丝袜图片大全| 性感美女一区二区三区| 中文字幕免费av在线| 人妻巨乳中文字幕亚洲在线| 99爱精品视频在线视频| 欧美一区2区三区在线播放| 久久精品国产亚洲av四区| 国产精品成人自拍视频| 亚洲精品中文字幕一二| 三上悠亚在线中文字幕| 在线观看不卡一区二区三区| 黄色传媒在线免费观看| 得得的爱在线视频免费观看| 国产欧美精选自拍视频| 三级久久在线中文字幕| 国产免费九九久久精品a级| 国产av 一区二区三区四区| 免费国产一区二区三区久久久久久| 成人国产av精品蜜桃漫画| 国产欧美精品日韩精品视频专区| 中文字幕人妻A片免费看| 高潮喷水波多野结衣在线观看 | 91成人资源在线观看| 青青草原精品免费在线视频| 91精品久久久久久五月| 欧美日韩午夜精品不卡综合| 中文字幕乱码视频播放| 人妻丝袜美腿中文字幕| 24小时在线免费观看高清视频| 午夜精品视频一区二区| 久久精品女人av一区二区| 97超碰免费观看在线| 婷婷丁香精品一区二区三区| 大阴茎疯狂抽插美女视频播放| 久久香蕉亚洲欧美av精品| 青青青色视频在线观看| 久久av成人中文字幕| 国产偷拍自拍熟女视频| av中文在线中文av| 国产亚洲欧洲在线成人| 97超碰在线播放视频| 亚洲性色成人av天堂| 青青草原国产视频在线观看| av中文在线中文av| 国产揄拍视频在线观看| 你懂的视频精品在线观看| 蜜臀av国内精品久久久久久| 亚洲少妇av一区二区三区| 成年人黄视频免费观看网站| 97自拍视频国产视频| av资源在线中文天堂| 久久99av无色码人妻蜜柚| 超长假大鸡巴从肛门捅到胃视频| 最新免费av在线观看| 青青草草视频在线播放| 伊人精品久久久久中文字幕| 国产一二三自拍视频在线观看| 青青精品视频在线免费观看| 久久精品国产高潮av| 国产欧美在线视频观看| 99久久在线免费观看| 性感美女一区二区三区| 日韩乱码中文字幕有码视频| 在线观看国产精品av| 自拍偷自拍亚洲精品10p| 熟女人妻中文字幕在线看| 97国产视频在线观看| 97视频在线免费观看网站| 国产一区二区三区在线h| 欧美成年一区二区三区| 91自拍免费在线视频| 97资源超碰在线中文| 亚洲精品 乱码久久久久久| 中文字幕视频观看在线中文| 日韩一区二区三区人妻| 亚洲乱码国产一区网址| 亚洲自拍偷拍 欧美激情| 啊哈怎么被那么多男生操| 三上悠亚在线中文字幕| 国产成人叼嘿视频在线观看| 日韩不卡毛片午夜在线看片?| 丝袜熟女av一区二区三区| 日韩成人伦理片在线观看| 亚洲精品 乱码久久久久久| 亚洲一区二区三区天海翼| 中文乱码在线观看视频| 日韩熟女精品91中文字幕| 国产亚洲精品成人av丝袜| 中文字幕在线午夜人妻| 超级碰碰在线视频国产| 一区二区三区在线网址| 黄视频网站免费观看视频| 久久人人妻人人做人人爽| 久久精品一区二区东京热| 欧美性欧美三级全透明时装秀| 成人黄色在线免费播放| 高潮喷水波多野结衣在线观看| 亚州精品一区二区@v| 人妻中出中文字幕在线| AV午夜福利一片免费看久久| 国产91精品入口人妻| 最新中文字幕av大全| 中国黄色靠逼大片大黑逼| 少妇的诱惑免费观看完整版中文| 青娱乐成人免费公开视频| 欧美一区二区三区资源| 五十路熟女人妻在线网观看| 欧美日韩一区二区三区性| 欧美激情一区二区二区| 日韩性感美女在线观看| 大岛优香中文字幕av人妻| 国产va欧美va精品va综| 丰满人妻熟妇乱又精品视| 成人黄色精品视频网站| 国产欧美日韩精品一区二区三区 | 欧美激情1区2区3区4区| 国产精品成人自拍视频| 成年人黄色片视频网站| 青青青青娱乐在线观看| 94精品视频在线播放| 国产一区二区三区伦理片一级| 日韩国产在线不卡av| 国产亚洲欧美日韩中文在线蜜臀| 丝袜熟女av一区二区三区| 女生高潮喷水视频免费在线观看| 91精品福利自产拍在线观看| 亚洲无av在线中文字幕男男| 最新成人精品视频在线| 久久人人妻人人做人人爽| 亚洲精品中文字幕午夜| 欧美一级内射视频在线播放| 日本美女丝袜天天看人体| 黄腔女兵最经典十句话| 美女黄a视频大全在线免费观看| 蜜臀av国内精品久久久久久| 欧美日韩一区 二区 三区| 成人美女主播在线播放| 97人妻免费公开视频| 欧美性少妇一区二区三区| 欧美成人精品一级在线观看| 黄色在线观看不卡无广告| 视频一区二区三区国产在线| 国产一级视频在线观看免费| 欧美网址一区二区三区| 亚洲天堂中文av网站| 精品在线观看视频一区| 日韩美女美女黄色黄色片| 色综合久久久久久久久8噜啦噜| 青青青色视频在线观看| 久久精品人妻免费观看| 国产精品人妻中文字幕| 青青热久免费精品视频| 97久久久久久久久久久| 轻轻插青青草视频在线播放| 成人十八禁av男人的天堂| 国产a三级三级三级精品91区| 青青青草青在线视频免费观看了| 国产丝袜熟女人妻在线观看| 人妻av在线中文字幕| 国产亚洲av久久精品| 国产成人av在线精品| 久久香蕉亚洲欧美av精品| 欧美一区二区三区黄片| 国产真实乱子伦清晰对白| 国产精品亚洲在线播放| 大型黄色av网站在线播放观看| 国产又粗又长又黄又大的视频| 亚洲av日韩av无码专区| 国产精品人妻中文字幕| 国内精品视频免费播放| 最新中文在线乱码av| 亚洲情色国产自拍偷拍| 中文字幕在线乱码观看| 91成人精品亚洲国产| 最新中文字幕av大全| 97在线观看的视频资源| 国产乱码字幕精品高清人v| 国产乱码字幕精品高清人v| 少妇直播一区二区三区| 免费的黄网站在线观看视频| 欧美熟妇一级二级三级a| 欧美成人动漫在线观看| 欧美激情高潮无遮挡男男| 久久国产精品9999p| 亚洲欧洲自拍拍偷第二页| 国产福利精品久久av| 国产在线日韩精品av| 丰满人妻99一区二区三区| 综合久久国产中文人妻少妇在线| 熟妇久久久人妻中文字幕| 国产粉精品高潮呻吟久久av| 亚洲第一区二区在线观看| 大象焦伊人久久综合网色视| 青青成人免费在线视频| av岛国一区二区三区久久| 日韩熟女精品91中文字幕| 日韩女优精品在线观看| 日本青草视频在线观看| 亚洲欧美一级久久精品| 成人av无码区二区三区| 在线看片免费人成视久网| 大香国产视频中文字幕| 久久久久久狠狠亚洲综合| av中文字幕一区在线| av中文字幕官网天堂| 大鸡巴操小嫩逼免费全裸| 极品视频在线免费播放| 中文字幕乱码中文字幕| 99er在线免费视频| 91人妻精品一区二区三区不| 中文字幕女优乱码久久午夜| 97精品综合久久视频| 亚洲激情av一区二区三区| 国产很黄很色精品久久久| 国产av一区二区三区老鸦窝| 亚洲另类激情综合偷自拍图| 亚洲成人日韩免费在线播放| 星宫一花av中文在线| 成人免费视频免费在线观看| 绿帽老公让娇妻蒙眼被人操| 欧美激情1区2区3区4区| 欧美国产精品久久综合| carpon视频在线观看| 国产视频免费在线播放| 大香国产视频中文字幕| 亚洲日本韩国一级二级三级 | av黄色资源中文字幕| 欧美在线1区2区3区| 青青视频在线观看播放观看| 在线 av 中文字幕| 国产精品自在在线午夜| 国产原创AV蜜芽尤物一区| 97在线观看免费观看视频| 国产乱码伦人偷精品视频| 欧美一区二区三区色污| 国产美女视频免费观看网| 丰满人妻熟妇又伦精品| 人妻熟女一区二区91| 亚洲中文字幕乱码免费视频| 国产日韩亚洲精品av| 男人操女人逼视频免费观看| 大乳美女疯狂榨取精子视频| 丝袜熟女av一区二区三区| 国产白嫩在线观看视频| 97成人在线精品视频| 97福利国产在线视频| 91人人妻人人做人人爱| 精品无人区麻豆乱码久久久| 熟女人妻专区中文字幕| 久久久免费久久久精品| 一区二区三区中国大乳房熟女| 亚洲一区在线人妻视频| 最近免费中文字幕大全高清3| 亚洲丝袜在线播放一区| 青青青草原成人在线视频| 免费在线观看亚州av| 日韩中文字幕人妻诱惑| 亚洲国内av不卡在线| 青草视频在线观看亚洲| 人妻丰满熟妇久久久久| 蜜臀av在线一区二区三区四区| 一区二区三区中国大乳房熟女| 欧洲美女一区二区三区| 国产69精品久久久久久妇| 麻豆av国语对白麻豆| 绝美人妻一区二区在线观看| 欧美狠狠一区二区三区| 日韩欧美人妻激情一区| 国产一区二区在线直播| 久久久久人妻精品一区二区三区| 中文字幕人妻欧美日韩熟女| 亚洲一区美腿丝袜在线播放| 人妻熟女一区二区91| 免费激情视频在线观看| 97超碰人妻福利在线| 亚洲激情av一区二区三区| 94精品视频在线播放| 国产丝袜熟女人妻在线观看| 久久久久国产AV成人网| 成人在线一区二区三区av| 日韩素人mium丝袜| 欧洲美一区二区三区亚洲| 国产免费黄色av 网站| 午夜性生大片免费在线观看| 国产av中文字幕乱码| 免费一级av高潮喷水片特| 97人人爽人人爽人人人爽| 国产 中文字幕 乱码 在线| 欧美日韩国产三级在线| 综合人妻一区二区三区| 精品人妻少妇嫩草一区二区三区| 亚洲在线欧美一区二区三区| 福利国产在线观看永久免费| 91成人精品亚洲国产| 亚洲情色一区二区三区四区五区| 国产性感美女在线免费观看| 青草视频中文字幕在线观看 | 国产哟av精品色哟哟| 免费在线观看亚州av| 法国熟女乱淫xxoo| 亚洲成人制服丝袜av| 国产自产拍午夜免费视频| 欧美中文字幕乱码在线播放| 色婷婷一区二区三区四区在线| 青青青草青在线视频免费观看了| 人妻av在线中文字幕| 男人把女人捅到爽歪歪黄| 国内欧美一区一区三区| 日韩一区二区三区人妻| 免费在线观看亚州av| 五十路熟女人妻在线网观看 | 国产盗摄一区二区三区在线| 男人添女人下边视频免费| 国产丝袜另类精品综合| 国产精品一级二级盗摄羞羞| 亚洲情色一区二区三区四区五区| 国产18精品乱码在线看| 亚洲另类激情综合偷自拍图| 久久精品国产亚洲av热黑人| 国产美女学生在线观看| 国产羞羞黄色av网站| 18免费在线观看av| 国产高清一级视频在线观看| 美女伸开双腿让男人桶视频 | 国产91av精品在线观看| 久久久久久久综合精品| 日韩毛片无码永久免费韩| 亚洲综合国产乱码成人| 带个大鸡巴臭逼的视频。| 日韩情色一区二区三区四区| av在线亚洲国产精品婷婷| 亚洲av丝袜诱惑在线| 青青青青草免费视频看看| av一区二区三区看片| 91在线视频网站总站| 免费一级av高潮喷水片特| 国产精品自在在线午夜| 日韩国产制服丝袜专区| 成人h色视频在线观看| 亚洲精选清纯唯美自拍偷拍| 午夜秋霞在线免费观看| 色一情一区二区三区精品 | 1024日韩人妻区二区| 亚洲视频国产精品你懂得| 国产午夜精品视频免费福利| 青青草原网址在线观看| 少妇的诱惑免费观看完整版中文 | 精品熟妇人妻一区二区三区四区| 日本丝袜美腿在线观看| 99人妻精品一区二区三区| 青青草原在线免费观看网址| 爽爽爽爽成人观看在线。| 色婷婷综合精品久久久| 我的放荡丝袜美腿老师| 97超碰人妻在线观看| 国产人妻一区二区免费播放| 国内精品伊人久久久久av| 国产亚洲精品线视频在线| 人妻熟女一区二区三区98| 欧美一区2区三区在线播放| 欧美激情一区二区三区成人| 久久99av无色码人妻蜜柚| 我的女人呻吟噢噢噢哦哦哦哦| 黄色在线观看不卡无广告| 亚洲乱码国产一区二区| 亚洲不伦丝袜人妻在线| 简述土壤监测方案设计流程| 成人国产精品视频在线| 亚洲一区二区三区18| 国产熟女丝袜一区二区三区四区| 蜜臀av夜夜澡人人爽人人| 国产亚洲免费在线视频| 精品无人区麻豆乱码久久久| 羞羞av一区二区三区| 精久久中文字幕人妻最新| 亚洲av日韩av无码专区| 大阴茎疯狂抽插美女视频播放| 最近中文字幕免费mv在线直播| 久久精品国产熟女亚洲av| 日韩制服丝袜在线播放| 91人人妻人人做人人爱| 久久精品人妻一区二区| 久久香蕉亚洲欧美av精品| 成年人黄视频免费观看网站| 国产一区二区不卡视频在线| 欧洲美女一区二区三区| 日韩欧美久久一区二区| 亚洲自拍一区在线观看| 97在线视频中文字幕| 中文字幕日韩在线久久| 青青青青草免费视频看看| 日韩不卡毛片午夜在线看片?| 亚洲乱码在线免费观看| 小美女操老头和动物操逼| 成人黄色av免费网站| 日本一区二区三级在线观看| 免费国产一区二区三区久久久久久| 精品熟妇人妻一区二区三区四区| 岛国av久热中文字幕| 国模在线一区二区三区| 久久综合中文字幕日韩精品| 黄色免费网址在线播放| 日韩在线不卡一区在线观看| 91最新黄色免费网站| 欧美性色欧美a在线视频| 中文字幕乱码在线视频网站| av中文字幕人妻丝袜| 精品久久久人妻中文字幕| 黄色av网站手机在线播放| 亚洲欧美综合国产精品一| 法国大屁股骚妇口交视屏| 日本免费精品一二三区| 久久久久久久久极品内射| 在线播放一区二区三区三州| 日韩欧美久久一区二区| 大型黄色av网站在线播放观看| 深夜在线视频在线观看| av天堂中文字幕精品| 夜精品一区二区无码A片| 国产麻豆精品在线视频| 人妻中出中文字幕在线| 最新中文在线乱码av| 青青草久久久久综合精品| 97超碰在线播放视频| 女人是为抠逼男人的鸡巴操逼| 国产自拍精品在线视频| 国产性一交一乱―色―情人| 日韩 国产 欧美 在线 一区| 青青草原精品免费在线视频| 老熟女老熟妇一区二区| 熟女系列丰满熟妇一区二区三区| 96av国产在线播放| 亚洲综合色区另类av| 国内少妇高潮毛片免费看| 国产乱码伦人偷精品视频| 日韩少妇一区二区三区四区五区| 精品国产污污污的网站| 国产成人免费a在线资源| 欧洲乱码在线观看视频| 国产精品乱码在线观看| 久草视频这里只有精品| 在线观看黄色播放网站| 99热爱精品在线观看| 想神马有神马舞蹈视频| 在线天天看片免费视频观看| 国产成人乱色视频网站| 久久福利视频在线播放| 精品人妻av中文字幕乱码男同| 国产精品亚洲av三区色| 精品 亚洲av 国产探花| 欧美一区二区在线播放视频| 欧美整片一区二区三区| 亚洲欧洲偷拍另类av| 很黄很色的视频免费在线观看| 国产成人乱码一区二区三区在线| 久久久久久噜噜噜久久久精品| 国产成人在线视频播放| 青青草日韩av在线播放| 91精品福利自产拍在线观看| 久久久久久久九九九b热| 白白色发布在线播放国产| 情趣丝袜美腿写真图片| 欧美黄色一级一区二区三区| 国产免费综合视频在线观看| 简述土壤监测方案设计流程| 在线观看日韩三级视频| 亚洲av丝袜诱惑在线| 外国大片在线免费观看| 成人区人妻精品一区二区| 黄色一级片久久久免费观看| 国产美女爽到喷出水来视频99| 24小时在线播放免费观看| 国产精品96乱子一级视频| 亚洲情色国产自拍偷拍| 亚洲熟妇色自偷自拍另类图片| 爱搞一区二区三区av| 日韩欧美成人精品视频在线| 亚洲国产一区二区久久| 中文字幕在线午夜人妻| 人妻一区二区免费播放| 亚洲国产精品视频免费看| 国产精品丝袜制服在线| 色婷婷国产精品免费视频| 日韩欧美人妻激情一区| 久久久99精品久久久久久久| 国产网友自拍视频一区| 久久精品国产v日韩v亚洲| 久久精品人妻一区二区| 99久久精品婷婷久久久久久| 六年级小女生光滑的小嫩逼| 国产免费在线视频观看| 亚洲中文字幕日韩av| 亚洲天堂中文av网站| 久草视频这里只有精品| 人妻视频资源在线观看| 人妻在线免费观看二区| 国产av 一区二区三区四区| 亚洲一区二区在线看看| 99久久久精品免费看国产| 成人在线观看免费视频播放| 中文字幕在线视频首页| 国产自拍精品在线视频| 成人在线观看免费视频播放| 九九久久久久无限久久| 综合婷婷一区二区三区| 国产成人叼嘿视频在线观看| 99九九久久国产精品| 99久久久精品免费看国产| 国产很黄很色精品久久久| 国产自产拍午夜免费视频| 成人h色视频在线观看| 亚洲国产精品黑丝美女| 中文字幕一区人妻激情 | 精品国产三级av在线| 法国熟女乱淫xxoo| 桃色视频在线观看97| 久久精品视频在线看24| 最好看的中文字幕av| 午夜97视频在线观看| 青青精品视频在线免费观看| 免费播放黄色操逼乱操逼| 丰满熟女一区二区三区在线播放 | 午夜日韩私人大片中国黄页网| 精品国产乱码久久久久久男人| 91精品国产人妻国产在线| 97 在线免费观看视频| 午夜草草视频在线观看| 日产日韩亚洲欧美综合在线| 国产网友自拍视频一区| 中文字幕人妻在线乱码搞| 91久久精品国产91性色| 成年人播放视频在线观看| 国产精品永久免费自在线观看| 国产a三级三级三级精品91区| 乱文丝袜乱文丝袜美腿视频| 国产欧美亚洲日本网站| 最新欧美69堂在线视频| 国产欧美日韩精品在线| 亚洲自拍一区在线观看| 欧美在线观看亚洲精品| 国产福利精品久久av| 国产亚洲欧美日韩精品| 亚洲乱码国产乱码精品精91| 久久精品中文字幕乱码视频| 国产日韩av大片快播| 日本美女丝袜天天看人体| 亚洲综合国产一区二区三区| 日韩 欧美 人妻 中文字幕| 亚洲一二三区精品在线观看| 成人h色视频在线观看| 亚洲一级av对白刺激| 青草成人在线观看视频| 国产精品久久久久久av色| 日韩人妻熟女中文字幕的视频| 97精品综合久久视频| 中文字幕乱码在线视频网站| 国产97视频免费在线观看| 成人av综合网中文字幕| 亚洲精品专区一区二区| 91在线国产视频观看| 成人在线视频免费播放| 亚洲成人av区一区二区三区四| 久久一区二区三区av| 三级国产精品久久久99| 欧美精品网站在线视频| 小视频在线观看你懂的| 亚洲精品你懂的在线观看| 日韩 国产 欧美 在线 一区| 丰满人妻熟妇乱又精品视| 精品一区二区三区四区在线播放| 黄色福利视频网址大全| 中文字幕乱码人妻久久精品| 欧美特级特黄a大片免费| 鸿观全集在线观看视频| 亚洲综合国产乱码成人| 日韩国产精品99久久久久久| xxx日韩欧美黄色a| 国内自拍视频在线swag| 欧美性色欧美a在线视频| 国产午夜精品自拍视频| 国产高清在线免费观看不卡av| av在线亚洲国产精品婷婷| 一道一本av精品久久毛片| 久久热视频在线免费观看| 风间由美亚洲一区二区三区| 国产国拍成人精品视频| 黄视频网站免费观看视频| 蜜臀av在线观看免费| 久久综合熟女中文字幕| 自拍偷自拍亚洲精品10p| 熟女少妇久久中文字幕| 91在线视频网站总站| 自拍偷自拍亚洲精品10p| 三级成人一区二区三区| 欧美激情精品久久久久久蜜臀| av人妻一区二区三区| 亚洲自拍偷拍 欧美激情| 久久激情四射视频一区| 日韩欧美人妻激情一区| 97在线视频中文字幕| 国产视频二区在线观看| 亚洲国产99精品国自产 | 亚洲一区美腿丝袜在线播放| 黄色免费网址在线播放| 得得的爱在线视频免费观看| 超碰人人爱人人爽人人av| 久久99亚洲精品久久频| 国产欧美日韩精品一区二区三区| 国产av日韩精品久久| 成人h色视频在线观看| 国产自拍偷拍在线免费| 一级成人欧美一区在线观看| 久久综合中文字幕日韩精品| 成人亚洲精品在线观看| 97人妻在线公开视频| 精品人妻av中文字幕乱码男同| 黄色av网站 亚洲精品| 欧美一区二区三区av| 99精品人妻一区二区三蜜桃 | 亚洲一区二区欧美激情| 丰满熟女一区二区三区在线播放| 最新欧美69堂在线视频| 人妻少妇激情综合小视频| 色综合久久综合欧美综合| 97com超碰在线免费| 日韩欧美精品中文字幕富二代| 超视在线免费观看视频| 亚洲少妇av一区二区三区 | 成人刺激视频免费观看| 大香视频依人在线中文字幕| 国产青青草在线观看视频| 亚洲欧美另类视频一区蜜臀| 亚洲性色成人av天堂| 久久老熟女一区二区福利蜜臀| 中文字幕乱码在线观看| 在线观看国产精品av| 日本美女丝袜天天看人体| 网站免费黄色在线播放| 日韩精品人妻av中文字幕| 极品少妇av一区二区| 国产很黄很色精品久久久| 免费女女同黄毛片av网站| 成人在线播放亚洲一区| 国内欧美一区一区三区| 在线观看黄色播放网站| av现场直播亚洲乱码| 青青青草青在线视频免费观看了| 久久精品国产熟女亚洲av| 日韩人妻丝袜美腿中文| 国模午夜写真福利在线| 亚洲 人妻 有码 在线| 国产精品自拍首页视频| 高清在线一区二区三区亚洲综合| 国产精品久久人妻互换| 国产精品中文av在线播放| 国产一区二区蜜臀av| 欧美三级精品三级在线| 国产欧美在线视频观看| 欧美 自拍 丝袜 人妻| 97人妻免费公开视频| 国产视频免费在线播放| 国产精品中文av在线播放| 果冻传媒av精品国产网站| 免费播放黄色操逼乱操逼| 色综合久久88色综合天| 精品在线观看视频一区| 国产自产拍午夜免费视频| 明日花绮罗人妻大乳av| 亚洲人妻av一区二区| 国产精品中文av在线播放| 亚洲成人av免费在线播放| 天天操天天日天天射天天爽| 欧美在线观看亚洲精品| 国产97视频免费在线观看| 男人女人40分钟视频| 99国产小视频在线播放| 网站免费黄色在线播放| 国产日韩av大片快播| 人妻精品在线观看一区二区三区| 成年av网站18不禁| 国产av日韩精品久久| 久久综合久久狠狠综合| 日本一区二区三区不卡免费 | 国产伦精品一级二级三级| 亚洲国产免费视频网站| 中文字慕人妻一区二区在线视频| av在线不卡中文字幕宾馆| 夜精品一区二区无码A片| 国产精品一二av在线| 午夜免费在线观看小视频| 青草视频在线观看亚洲| 国产亚洲精品高清一区| 小视频在线观看你懂的| 最新成人精品视频在线| 久久亚洲精品色噜噜狠狠| 国产中文精品久高清在线不| 亚洲中文字幕乱码在线| 女女同性女同区二区日韩| 免费观看成人午夜激情视频| 国内自拍视频在线观看h| 国产18精品乱码在线看| 国产成人乱码一区二区三区在线| 午夜激情免费视频成人| av网站在线观看青青草| 男人靠女人靠厉害视频| 青青青草av在线观看| 日韩av大片在线免费观看| 韩国性感美女热舞视频| 亚洲黄色资源在线浏览| 欧美亚洲另类一区二区三| 情趣丝袜美腿写真图片| 亚洲中文字幕日韩av| 国产 剧情 在线 精品| 国产av一区二区三区老鸦窝| 欧美日韩制服丝袜第一页| av资源中文在线天堂播放| 日本一区二区三区人妻| 久久99亚洲精品久久频| 亚洲人妻中文字幕网站| 99热爱精品在线观看| 你懂得在线免费观看99| 国产 中文字幕 乱码 在线| 天海翼一区二区三区免费| 免费av在线网站中文字幕| 97视频在线免费观看网站| av一区中文字幕在线| 国内精品视频免费播放| 在线看片免费人成视久网| 日韩av在线日韩av日韩av | AV午夜福利一片免费看久久| 国产精品精品久久久18| 青草青青青青青青操死你| 亚洲精品沙发专享系列av| 国产日韩精品在线欧美| 精品人妻少妇一区二区三级| 久久精品国产v日韩v亚洲 | 人妻系列少妇极品熟妇| 国产sese在线播放| 521a成v精品视频在线播放| 综合av一区二区三区| 日韩人妻久久中文字幕| 丰满人妻精品一区二区三区| 男女av一区二区三区| 人妻巨乳中文字幕亚洲在线| 成人免费三级在线观看| 欧美日韩一区二区三区性| 亚洲三级一区二区三区四区| 日韩午夜在线视频不卡片| 熟女阿av一区二区三| 欧美狠狠一区二区三区| 国产91av精品在线观看| av在线观看亚洲中文| 成人免费三级在线观看| 丝袜人妻激情在线视频| 成人黄色av免费网站| 青青草日韩av在线播放| 国产无码精品久久久久久久| 成人十八禁av男人的天堂| 青娱乐 青青青操 天天日| 免费精品国偷自产在线洗澡| 五十路熟女人妻在线网观看| 国产日韩av大片快播| 成人免费av网址在线观看| 精品亚洲一区二区三区ftp| 在线观看的资源网97| 日本一本久a久久精品综合| 国产精品欧美一区二区久久久| 亚洲区域一区二区三区| 久久亚洲国产精品成人| 欧美日韩制服丝袜第一页| 超碰在线最新地址97| 明星性感丝袜图片大全| 国产成人麻豆精品视频| 青青青国产免费观看视频| 久久久99人妻一区二区三区| 熟女麻豆一区二区三区四区| 亚洲av日韩av无码专区| 亚洲精品 乱码久久久久久| 国产亲乱的性视频网站| 青青青青草免费视频看看| 91在线精品免费视频| 91在线国产视频播放| 亚洲一区二区在线视频播放| 亚洲综合国产一区二区三区| 精品熟女一区二区三区免费视频| 美女视频吃奶视频在线观看| 在线看片免费人成视久网| 性感丝袜美女写真视频| 麻豆av 无码精品一区二区| 美女视频吃奶视频在线观看| 少妇性生活久久久久久| 超碰在线最新地址97| 国产91av精品在线观看| 99综合精品在线观看| 91精品福利自产拍在线观看| av中文字幕官网天堂| 色老久久精品偷偷鲁一区| 国产盗摄一区二区三区在线| 91自拍免费在线视频| 欧美少妇一区二区三区| 欧美一区2区三区在线播放| 青青青视频自偷自拍视频1| 91在线视频网站总站| 久久国产精品亚洲va麻豆| 亚洲三级一区二区三区四区| 蜜臀av在线一区二区三区四区| 最近免费中文字幕大全高清3| 亚洲天堂中文av网站| 国产综合日韩精品欧美| 在线 av 中文字幕| 爽爽爽爽成人观看在线。| 欧美日韩精品成人在线| 老熟女一区二区三区四区| 熟女一区二区三区 在线| 亚洲中文字幕乱码免费视频| 欧美网址一区二区三区| 国产精品亚洲av二区三| 久久香蕉亚洲欧美av精品 | 精色av中文字幕在线| 国产乱码伦人偷精品视频| 小美女操老头和动物操逼| 亚洲欧美精品丝袜中文字幕| 中文字幕在线亚洲视频| 久久99久久久久久久久| 欧美日韩一区 二区 三区| 国产69精品久久久久久妇| 人妻精品在线观看视频| 99er在线免费视频| 久久久久国产AV成人网| 国产AV躁一二三区免费播放| 少妇一区二区三区97少妇| 亚洲精品中文字幕一二| 午夜男女爽爽爽爽爽爽爽| 99久久国产综合精品五月天| 亚洲欧美日韩精品麻豆| 与女性一起行走男性应走| 亚洲精品专区一区二区| 男人添女人下边视频免费| 精品一区二区三区四区在线播放| 超碰在线97青青草原| 日韩国产在线不卡av| 日韩人妻久久中文字幕| 亚洲熟女一区2区三区| 免费女女同黄毛片av网站| 亚洲欧洲日产日韩激情| 国产熟女人妻在线观看| 亚洲一区美腿丝袜在线播放| 99九九99久久精品| 成人国产一区二区在线| 97久久人妻一区二区| 亚洲欧美丝袜美腿 综合| 国产精品永久免费自在线观看| 日韩欧美久久一区二区| 97人妻免费在线视频| 99re这里有精品免费视频| 人妻少妇偷人一区二区三区| 午夜嗨起视频在线观看| 国产原创AV蜜芽尤物一区| 快速播放国产精品视频| 婷婷色综合一区二区久久久| 鸿观全集在线观看视频| 成人午夜精品一区二区三区| 成人国产精品视频在线| 久久久久久狠狠亚洲综合| 国内网友自拍视频在线| 老女人av一区二区三区| 精品熟妇人妻一区二区三区四区| 欧美精品久久久久久久久91| 国产偷拍自拍在线免费| 国产亚洲欧美日韩三级| 亚洲国内av不卡在线| 亚洲一区二区在线看看| 在线中文字幕有码视频| 国产91av精品在线观看| 亚洲av丝袜诱惑在线| 高清在线一区二区三区亚洲综合| 久久久久久久久极品内射| 亚洲精品国产av久久| 青娱乐成人免费公开视频| 性感丝袜短裙美女啪啪啪| 免费观看成人午夜激情视频| 性感美女肉色丝袜诱惑| 欧美精品网站在线视频| 免费的黄网站在线观看视频| 99久久无码精品区二区毛片| 日韩欧美成人精品视频在线| 朋友的妈妈在线免费观看中字 | 在线国产视频精品视频| 一边吃扎一边插逼逼视频| 久久综合中文字幕日韩精品| 欧美激情精品久久久久久蜜臀| 日本熟日本熟妇中文在线观看| av现场直播亚洲乱码| 吖v在线观看欧美一区二区三区| 黄色一级片久久久免费观看| 欧美整片一区二区三区| 性感丝袜短裙美女啪啪啪| 亚洲av专区在线观看国产| 99re这里只有精品在线| 欧美熟妇乱色一区二区| 风间由美亚洲一区二区三区| 青青操新免费观看视频| 成人区人妻精品一区二| av大全一区二区三区| 国产av中文字幕乱码| 女女同性女同区二区日韩| 人妻互换精品一区二区| 久久久免费一区二区三区| 亚洲一a区二a区三a区| 很黄很色的视频免费在线观看| 精品人妻少妇嫩草一区二区三区| 亚洲午夜精品久久久久久人妖| 国产成人av午夜精品免费| 国产自产拍午夜免费视频| 国产亚洲欧美日韩中文在线蜜臀| 97福利国产在线视频| 日韩熟女人妻国产av| 久久99久国产精品66| 日韩 国产 欧美 在线 一区| 丰满人妻99一区二区三区 | 性做久久久久久久毛片| 中文字幕综合av一区二区三区| 青青草原国产在线免费观看| 饥渴少妇高潮露脸嗷嗷叫| 午夜18在线观看视频| 国产免费在线视频观看| 久久夜色精品国产亚洲av老牛| 亚洲av乱码在线观看| 亚洲成人av区一区二区三区四| 综合久久国产中文人妻少妇在线| 婷婷色综合一区二区久久久| 夜欲av无码精品一区二区| 爱搞视频在线免费观看的网站| 成人国产麻豆一区二区| 久久亚洲精品色噜噜狠狠| 欧美日韩午夜精品不卡综合| 91国产自拍在线播放| 美女观看网站免费不卡视频| 国产粉精品高潮呻吟久久av| 国产av一区二区三区老鸦窝| 久久三级视频在线观看| 亚洲欧美一级久久精品| 制服 丝袜 欧美 国产精品| 久久精品视频在线看24| 欧美黄色一级一区二区三区| 成人 中文字幕 熟女| 中文字幕乱码不卡一区二区三区| 最好看的中文字幕av| 人妻系列av无码专区免费| 久久激情四射视频一区| 亚洲乱码国产乱码精品精91| 视频一区二区三区国产在线| 男人插女人逼有声视频| 性感丝袜短裙美女啪啪啪| 丰满人妻视频一区二区| 国产免费av国片精品| 狠狠久久亚洲美洲专区| 直接免费观看黄色的网站| 国产成人免费在线观看av| 日本视频在线一区二区三区| 97在线视频中文字幕| 亚洲一区二区三区18| 男人操女人逼视频免费观看| 日韩毛片无码永久免费韩| 成人黄色在线免费播放| 国产 中文字幕 乱码 在线| 果冻传媒av精品国产网站| 人人综合亚洲无线码另类会员 | 性感丝袜美女写真视频| 欧美午夜激情福利国产| 丰满人妻精品一区二区三区| av在线中文字幕资源网| 亚洲精品沙发专享系列av| 国产1区2区3区在线播放| 精品日本一区二区三区四区| 超污短视频网站在线观看| 精品一片二片三片在线| 黄色的网站免费在线看| 韩剧熔炉在线完整免费观看 | 日本国产一区二区在线观看| av天堂午夜精品蜜臀| 青草视频在线观看亚洲| 日韩人妻这里只有精品| 国内一区二区三区视频在线播放| 久久夜色精品国产亚洲av老牛| 精品久久久中文字幕人妻| 国产一二三自拍视频在线观看| 国产av 一区二区三区四区| 我的女人呻吟噢噢噢哦哦哦哦| 国产成人乱色视频网站| 国产护士性爽视频在线观看| 国产一区二区成人av| 91国产自拍在线视频| 96精品久久久久久久久| 亚洲不卡码一区二区三区| 国产视频在线观看视频| 亚洲一区二区三区成人在线| 国产亚洲欧美日韩精品| 亚洲中文字幕乱码在线| 成人av综合网中文字幕| 18免费在线观看av| 国产精品久久久久精品| 欧美成年一区二区三区| 青青久久国内视频网站| 国内偷拍中文字幕蜜臀| 欧美日韩一区二区三区性| 激情人妻校园春色亚洲欧美| 精品人妻久久久久一区二| 成年人黄视频免费观看网站| 青春草视频免费观看在线| 欧美日韩一区 二区 三区| jizz视频在线观看| 91麻豆精品在线播放| 国产女老师的诱惑在线播放观看 | 亚洲精品沙发专享系列av| 免费a站网址在线观看| 熟女一区二区三区 在线| 黑丝美女的骚逼尖叫高潮声| 中文字幕国产乱码视频| 国产69精品久久久久久妇| 欧洲美女一区二区三区| 人人妻人人做人人妻av| 精品人妻一区二区三区成人网 | av中文字幕一二三四| 国产精品欧美一区二区久久久 | 欧美一区2区三区在线播放| 中文字幕国产乱码视频| 91最新精品视频在线观看| 亚洲一区二区av在线| 国产揄拍视频在线观看| 国产欧美久久久久久精品一| 97国产视频在线观看| 国产成人黄色在线观看| 欧美日韩一区三区不卡在线| 国产日韩欧美精品久久| 国产 中文字幕 乱码 在线| 青青草草视频在线播放| 中文字幕人妻系列在线视频| av资源在线中文天堂| 青青青草原成人在线视频| 国产AV躁一二三区免费播放| 韩剧熔炉在线完整免费观看| 在线播放亚洲一级特黄片| 男人天堂中文字幕av| 国产成人免费a在线资源| 亚洲一二三区精品在线观看 | 能效等级一级二级三级| 麻豆av 无码精品一区二区| 国产亚洲欧美日韩三级| 精品视频在线观看91| av天堂午夜精品蜜臀| 欧美一区二区三区四区在线观看| 欧美情色大片在线观看| 在线成人免费观看视频网址 | 国内自拍视频在线观看h| 国产高清av一区二区在线观看| 韩剧熔炉在线完整免费观看| 与女性一起行走男性应走| 日韩人妻丝袜美腿中文| 欧美一区二区三区资源| 91/日韩/精品/乱码| 超级碰碰在线视频国产| 在线观看的资源网97| 久久99久国产精品66| 国产福利精品久久av| 老男人xx女人视频试看| 国产成人精品欧美日韩网站| 精品久久99在线观看| 蜜臀久久99精品久久宅男| 国产免费黄色av 网站| 久久天天躁狠狠躁夜夜av| 日本熟日本熟妇中文在线观看| 激情av一区av二区| 草草视频免费在线观看| 日韩人妻久久中文字幕| 午夜精品182视频国产| 国产精彩自拍视频在线观看 | 中文字幕人妻少妇久久| 免费av在线网站中文字幕| 超碰人妻免费一区二区| 好想被狂操在线无码视频| 视频一区二区三区国产在线| 日本午夜免费在线视频| 三级国产精品久久久99| 人妻熟女一区二区三区98| 亚洲另类激情综合偷自拍图| 亚洲区域一区二区三区| 日韩 欧美 人妻 中文字幕| 成年av网站18不禁| 伊人精品久久久久中文字幕| 日韩欧美成人精品视频在线| 国产极品粉嫩交性大片| 欧美国产中文一区二区三区| 久久久99精品久久久久久久| 国产盗摄一区二区三区在线 | 国产美女视频免费观看网| 久久久亚洲裙底偷窥综合| 国产网红主播在线观看视频| 99视频在线精品免费| 日韩熟女中文字幕一区| 青青草原国产视频在线观看| 欧美激情视频免费观看| 日本一区二区三级在线观看| 亚洲国产免费视频网站| 97精品综合久久视频| av中文字幕人妻丝袜| 美女午夜写真福利视频| 想神马有神马舞蹈视频| 久久久久久久久99密月| 国产深夜视频在线观看| 国产高清三级在线精品福利| 亚洲日本韩国一级二级三级| 精品一片二片三片在线| 精品国产黄片一二三区| 精品无人区一区二区三区av| 久久99av无色码人妻蜜柚| 欧美专区一区二区在线| 九九激综合五月天国产| 国产高清在线一区不卡极品| 国产成人免费a在线资源| 永久免费在线观看视频网站| 粉嫩av蜜乳av蜜臀av| 亚洲国产成人精品久久久久| 日本免费一区二区三区中文字幕 | 97人妻超碰在线免费视频| 久青青草视频在线播放| 中文字幕人妻丝袜成熟乱三区| 亚洲黄色分享大全探花| 欧美一区二区在线观看网站| 人妻熟女欧美一区二区| 娇小被黑人爆出水黑人复古| 国内网友自拍9色视频| 欧美一区二区三区99| 国产成人免费在线观看av| 免费av网址一区二区| 亚洲精选清纯唯美自拍偷拍| 亚洲成人日韩免费在线播放| 国产91情侣在线视频| 日韩人妻熟女中文字幕的视频| 精品国产黄片一二三区| 欧美亚洲另类一区二区三| 国内网友自拍9色视频| 国产精品人妻中文字幕| 国产亚洲精品高清一区| 日韩中文字幕avsex| 日本免费一区二区三区中文字幕 | 日韩素人mium丝袜| 中文字幕综合av一区二区三区| 熟女人妻专区中文字幕| 熟妇久久久人妻中文字幕| 亚洲欧美自拍偷拍另类| 人妻视频资源在线观看| 91在线视频网站总站| 法国熟女乱淫xxoo| 2023国产精品自拍视频| 久久成人在线视频播放| 欧美情色一区二区三区| 在线观看日韩三级视频| 日韩欧美久久一区二区| 亚洲av成人噜噜网站| 97精品综合久久视频| 国产成年免费观看视频| 永久免费在线观看视频网站| 青青草原网址在线观看| 日韩在线不卡一区在线观看| 国产一二三自拍视频在线观看| 国产精品亚洲av三区色| 黄色一级片久久久免费观看| 国产精品成人中文字幕| 亚洲成人日韩免费在线播放| 搬开女人下面使劲插视频| av一区二区三区看片| 97在线观看的视频资源| 熟女一区二区三区播放| 国产美女扒开粉嫩尿口网站| 三级久久在线中文字幕| 国产丝袜另类精品综合| 色老久久精品偷偷鲁一区| 在线观看黄色播放网站| 午夜秋霞在线免费观看| 试婚99天视频免费完整版观看| 国外成人免费激情在线视频| 综合久久国产中文人妻少妇在线| 色视频在线免费观看视频播放| 国内一区二区三区视频在线播放| 国产精品欧美一区二区久久久| 巨乳人妻中文字幕精品在线| 国产性一交一乱―色―情人| 我想听大香蕉大家大香蕉| 成人激情自拍图片视频| av资源在线中文天堂| 国产亚洲av久久精品| 永久免费在线观看视频网站| 黄黄的小视频免费在线播放| 国内欧美一区一区三区| 国产很黄很色精品久久久| 色一情一乱一乱一区91Av| 真人视频在线免费观看| 99国产精品久久全免费| 青青青草av在线观看| 97久久公开视频在线| 亚洲成人av中文字幕免费播放 | 亚洲男人天堂超碰在线| 区一区二区三在线播放| 日韩三级黄色免费网站| 国产亚洲精品高清一区| 94精品视频在线播放| 日韩中文字幕人妻一区| 日韩欧美一区二区专区在线观看| 欧美日韩激情午夜看片| 97在线观看免费观看视频| 内射中文字幕在线观看| 国产成人麻豆精品视频| 麻豆国产成人av在线| 黄色传媒在线免费观看| 精品日韩欧美人妻系列| 亚洲在线欧美一区二区三区| 蜜臀国产在线观看播放免费| 精品人妻av中文字幕乱码男同 | 国产丝袜熟女人妻在线观看| 免费人成在线观看视频高潮| 成人av日本在线观看| 亚洲一区二区三区色视频| 国产精品亚洲av二区三| 成人国产精品视频在线| 成人av在线播放网址| 国产精品成人中文字幕| 国产原创AV蜜芽尤物一区| av岛国一区二区三区久久| 精品人妻av中文字幕乱码男同| 欧美熟妇一级二级三级a| 欧美日韩精品成人在线| 91人妻精品一区二区三区不| 国产人妻一区二区免费播放| 国产精品丝袜熟女一二三| 99爱在线精品视频免费看| 美女自拍偷拍亚洲一区| 正在播放99精品视频在线播放| 95国产成人精品视频| 午夜精品久久久在线观看| 久久99亚洲精品久久频| 91最新精品视频在线观看| 这里都是国产视频精品| 直接免费观看黄色的网站| 成人 中文字幕 熟女| 亚洲国产成人不卡av| 国产精品成人自产拍在线| 97超频精品在线观看| 三级久久在线中文字幕| 免费的黄网站在线观看视频| 日韩人妻少妇二三四区| 日本一本久a久久精品综合| 日韩av在线日韩av日韩av| 日韩欧美一区二区专区在线观看 | 国产 剧情 在线 精品| 污污污网址免费在线观看| 97成人在线视频免费观看| 亚洲一区二区欧美激情| 中文字幕无码中文字幕有码在线| 精品人妻少妇av一区二区| 青娱乐 青青青操 天天日| 91人妻精品一区二区三区不 | 日韩美女美女黄色黄色片| 久久久久久久精品女人毛片| 日韩精品成人av高清在线观看| 亚洲av无久久精品一区二区| 一区二区三区 国产日韩欧美| 巨乳少妇av中文字幕| 欧美特级特黄a大片免费| 丰满熟女一区二区三区在线播放 | 日本熟日本熟妇中文在线观看| 青草视频中文字幕在线观看| 人妻久久一区二区三区精品99| 欧洲乱码在线观看视频| 成人国产精品视频在线| 亚洲无av在线中文字幕男男| 四川熟女a一区二区三区| 久久99久久精品免观看吃奶 | 国产综合日韩精品欧美| 亚洲综合色在线一区二区| 另类专区日韩有码中文字幕| 午夜精品182视频国产| 午夜mm1314视频| 国产精品成人自产拍在线| 大岛优香中文字幕av人妻| 欧美日韩精品欧美日韩| 午夜精彩视频网站免费观看| av在线男人社区日韩| 日韩av大片在线免费观看| av资源中文在线天堂播放| 24小时在线免费观看高清视频| 精品成人一区二区三区在线观看 | 国产亚洲精品高清一区| 97在线观看免费观看视频| 美女在线观看免费在线观看| 97超碰超碰在线观看| 人妻久久一区二区三区精品99| 亚洲中文字幕乱码免费播放| 免费av在线网站中文字幕| 国产精品自拍首页视频| 久亚洲国产精品蜜臀尤物| 午夜精品182视频国产| 伊人丝袜人妻中文字幕| 亚洲一区二区三区色视频| 九九久久99最新精品| 久久久久99精品成人| 97视频在线免费观看网站| 日韩欧美久久一区二区| 国产午夜高潮熟女精品| 96精品久久久久久久久| 国产精品一级二级盗摄羞羞| 色综合久久综合欧美综合| 蜜月久久99精品久久久久久| 女生高潮喷水视频免费在线观看| 国产精品入口蜜臀人妻| 亚洲男人天堂超碰在线| 亚洲天堂中文av网站| 日韩在线一区二区三区中文字幕| 成人在线视频播放 亚洲| 日韩国产制服丝袜专区| 青青草原免费体验视频| 亚洲欧美丝袜美腿 综合| 一区二区三区中国大乳房熟女| 熟女麻豆一区二区三区四区| 亚洲一区二区在线视频播放| 亚洲熟女一区2区三区| av中文字幕每日更新| 性感丝袜短裙美女啪啪啪| 色婷婷一区二区三区四区在线| 成人免费看片98欧美| 国产成人免费在线观看av| 久久久99精品久久久久久久| 国产精品三级av及在线观看| 欧美日韩在线精品激情| 黄色美女在线观看日韩| 久久国产精品99精国产| 青青青草青在线视频免费观看了| 亚洲欧洲自拍拍偷第二页| 日韩 欧美 人妻 中文字幕| 亚洲欧美成人自偷自拍一区| 小美女操老头和动物操逼| 亚洲综合图片一区二区三区| 丰满美女一区二区三区| 欧美一区二区三区色污| av人妻一区二区三区| 青青热久免费精品视频| 亚洲无av在线中文字幕男男| 亚洲av色在线观看国产| 亚洲精品国产精品懂色av| 国产1区2区3区在线播放| av在线亚洲国产精品婷婷| 国产欧美精品日韩精品视频专区 | 欧美一区二区三区四区在线观看| 日韩中文字幕avsex| 91福利国产成人精品播放| 日韩国产在线不卡av| 青青青国产免费观看视频| 国内欧美一区一区三区| 18免费在线观看av| 超碰人妻免费一区二区| 青青草日韩av在线播放| 最新欧美69堂在线视频| 国产精品网站调教美女| 国产成人av午夜精品免费| 亚洲情a成黄在线观看动漫尤物| 日本免费一区二区三区中文字幕| 亚洲欧洲自拍拍偷第二页| 久久99久久精品免观看吃奶 | 成人极品av免费观看| 国内精品视频免费播放| 亚洲一区二区三区18| 少妇人妻一区二区三区3d| 国产伦精品一区二区三区视频下载| 绝美人妻一区二区在线观看| 国产亚洲精品成人av丝袜| 欧美一级色片在线播放| 成人av在线播放网址| 巨乳人妻中文字幕精品在线| 深夜视频在线观看免费| 亚洲精品沙发专享系列av| 国产a久久观看免费视频| 夜夜欢性恔真人免费视频| 国产97视频在线观看| 污污黄色免费在线观看| 国产粉精品高潮呻吟久久av| 欧美日韩一区二区三四| 国产乱精品一区二区视频了| 国产a久久观看免费视频| 成人h色视频在线观看| 嘴唇上长黄色的小点点| 午夜一区视频在线观看| 国产午夜福利精品理论片久久| 天天操天天日天天射天天爽| 91福利国产成人精品播放| 国产熟女丝袜一区二区三区四区| 国产av一区二区三区老鸦窝| 99视频精品视频观看| 国产免费综合视频在线观看| 国产精品一二av在线| 在线观看的资源网97| 青草成人在线观看视频| 翔田千里精品久久一区二| 丝袜制服诱惑人妻av| 国产精品成人中文字幕| 日韩一级淫片蜜臀播放口| 六年级小女生光滑的小嫩逼| 日本青草视频在线观看| 男人和女人的性生活视频| 中文字幕女优乱码久久午夜| 亚洲 综合 欧美 日韩| 日本人妻中文字幕在线| 国产亚洲精品高清一区| 免费一级av高潮喷水片特| 亚洲av日韩综合一区在线观看| 少妇人妻av毛片在线看| 国产一级视频在线观看免费 | 亚洲中文字幕日韩av| 在线播放网站一区二区三区| 1024日韩人妻区二区| 成人在线观看免费视频播放| 亚洲男人天堂超碰在线| 亚洲欧洲自拍拍偷第二页| 午夜精品视频一区二区| 中文字幕亚洲熟女精品人妻| 午夜18在线观看视频| 成人免费在线视频亚洲| 日本中文字幕乱码免费视频| 色一情一乱一乱一区91Av| 青青精品视频在线免费观看| 欧美生活一区二区三区| 国产哟av精品色哟哟| 久亚洲国产精品蜜臀尤物| 久久久久亚洲精品乱码按摩| 亚洲av丝袜诱惑在线| 国产无码精品久久久久久久| 日韩国产精品99久久久久久| 国产一区二区三区亚洲一区| 外国大片在线免费观看| 边摸边吃奶边做毛片视频| 欧美激情精品久久久久久蜜臀| 永久免费在线观看视频网站| 国产一区二区蜜臀av| 超碰97在线公开观看| 超污短视频网站在线观看| 日产日韩亚洲欧美综合在线| 久久99久国产精品66| 青青青爽综合在线视频| 国产一区二区不卡视频在线| 国产精品欧美一区二区久久久| 久久精品国产高潮av| 97精品综合久久视频| av岛国一区二区三区久久| 中国黄色靠逼大片大黑逼| 女生高潮喷水视频免费在线观看| 国产熟妇一区二区三区四区| 国产粉精品高潮呻吟久久av| 久久精品中文字幕乱码视频| 精品人妻少妇av一区二区| 亚洲综合国产一区二区三区| 精品99在线免费视频| 中文字幕精品久久久乱码乱码| 熟女一区二区三区播放| 丰满人妻精品一区二区三区| 国产日产欧产精品精乱了派| 久久久久99精品成人| 午夜男女爽爽爽爽爽爽爽| 久久久久久久精品女人毛片| 97人妻中出中文字幕| 国产日韩亚洲精品av| 亚洲精品沙发专享系列av| 韩国三级一区二区在线观看| 国产亚洲欧洲在线成人| 18免费在线观看av| 蜜臀成人av在线观看| 日韩中文字幕avsex| 男人插女人逼有声视频| 亚洲精品国产精品乱码不卡| 在线亚洲视频中文字幕| 人妻熟女一区二区三区98| 国产500部视频在线观看| 人妻一区二区在线免费播放| 最新在线一区二区三区| 国产精品久久久久九九九九|