精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

什么是 TypeScript 4.1 中的模板字面類型?

開發 后端
寫了這么多年 TypeScript,最大的感觸就是它非常易于理解——特別是對于具有 Java 背景的人。 但是,在聽說了 TypeScript 4.1(該語言最近的重大更新)的新聞之后,我還是為新鮮的特性感到驚奇。

[[358653]]

 寫了這么多年 TypeScript,最大的感觸就是它非常易于理解——特別是對于具有 Java 背景的人。 但是,在聽說了 TypeScript 4.1(該語言最近的重大更新)的新聞之后,我還是為新鮮的特性感到驚奇。

我不認為我是個無知的例外。 在利用該新聞作為機會來深入了解類型系統的實際工作方式之后,我想與您分享新版本的令人興奮的功能和變化,并提供關鍵字說明和許多神奇的示例。

如果你的 TypeScript 語言基礎比較扎實,并且渴望學習高級功能,那么就開始吧。

新的語言特性

模板字面類型

自 ES6 開始,我們就可以通過模板字面量(Template Literals)的特性,用反引號來書寫字符串,而不只是單引號或雙引號:

  1. const message = `text`; 

正如 Flavio Copes 所言,模板字面量提供了之前用引號寫的字符串所不具備的特性:

  • 定義多行字符串非常方便
  • 可以輕松地進行變量和表達式的插值
  • 可以用模板標簽創建 DSL(Domain Specific Language,領域特定語言)

模板字面量類型和 JavaScript 中的模板字符串語法完全一致,只不過是用在類型定義里面:

  1. type Entity = 'Invoice'
  2.  
  3. type Notification = `${Entity} saved`; 
  4. // 等同于 
  5. // type Notification = 'Invoice saved'
  6.  
  7.  
  8. type Viewport = 'md' | 'xs'
  9. type Device = 'mobile' | 'desktop'
  10.  
  11. type Screen = `${Viewport | Device} screen`; 
  12. // 等同于下面這一行 
  13. // type Screen = 'md screen' | 'xs screen' | 'mobile screen' | 'desktop screen'

當我們定義了一個具體的字面量類型時,TypeScript 會通過拼接內容的方式產生新的字符串字面量類型。

鍵值對類型中鍵的重新映射(Key Remapping)

映射類型可以基于任意鍵創建新的對象類型。 字符串字面量可以用作映射類型中的屬性名稱:

  1. type Actions = { [K in 'showEdit' | 'showCopy' | 'showDelete']?: boolean; }; 
  2. // 等同于 
  3. type Actions = { 
  4.   showEdit?:   boolean, 
  5.   showCopy?:   boolean, 
  6.   showDelete?: boolean 
  7. }; 

如果你想創建新鍵或過濾掉鍵,TypeScript 4.1 允許你使用新的 as 子句重新映射映射類型中的鍵:

  1. type MappedTypeWithNewKeys<T> = { 
  2.     [K in keyof T as NewKeyType]: T[K] 
  3.      

TypeScript Remapping KeysThe new as clause lets you leverage features like template literal types to easily create new property names based on old ones. Keys can be filtered by producing never so that you don’t have to use an extra Omit helper type in some cases: 通過使用新的 as 子句,我們可以利用模板字面量類型之類的特性輕松地基于舊屬性創建新屬性名稱。我們可以通過輸出 never 來過濾鍵,這樣在某些情況下就不必使用額外的 Omit 輔助類型:

  1. type Getters<T> = { 
  2.     [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K] 
  3. }; 
  4.  
  5. interface Person { 
  6.     name: string; 
  7.     age: number; 
  8.     location: string; 
  9.  
  10. type LazyPerson = Getters<Person>; 
  11. //   ^ = type LazyPerson = { 
  12. //       getName: () => string; 
  13. //       getAge: () => number; 
  14. //       getLocation: () => string; 
  15. //   } 
  16.  
  17. // 去掉 'kind' 屬性 
  18. type RemoveKindField<T> = { 
  19.     [K in keyof T as Exclude<K, "kind">]: T[K] 
  20. }; 
  21.  
  22. interface Circle { 
  23.     kind: "circle"
  24.     radius: number; 
  25.  
  26. type KindlessCircle = RemoveKindField<Circle>; 
  27. //   ^ = type KindlessCircle = { 
  28. //       radius: number; 
  29. //   } 

TypeScript 利用帶有 as 子句的模板文字類型 (source)

JSX 工廠函數

JSX 代表 JavaScript XML,它允許我們使用 JavaScript 編寫 HTML 元素并將其放置在 DOM 中,而無需任何 createElement() 或 appendChild() 方法,例如:

  1. const greeting = <h4>Yes I can do it!</h4>; 
  2. ReactDOM.render(greeting, document.getElementById('root')); 

  TypeScript 4.1 通過編譯器選項 jsx 的兩個新選項支持 React 17 的 jsx 和 jsxs 工廠函數:

  • react-jsx
  • react-jsxdev

“這些選項分別用于生產和開發編譯。通常,一個選項可以擴展自另一個選項。” — TypeScript發版說明

以下是兩個用于生產和開發的 TypeScript 配置文檔的兩個示例:

  1. // ./src/tsconfig.json 
  2.   "compilerOptions": { 
  3.     "module""esnext"
  4.     "target""es2015"
  5.     "jsx""react-jsx"
  6.     "strict"true 
  7.   }, 
  8.   "include": ["./**/*"

開發配置:

  1. // ./src/tsconfig.dev.json 
  2.   "extends""./tsconfig.json"
  3.   "compilerOptions": { 
  4.     "jsx""react-jsxdev" 
  5.   } 

如下圖所示,TypeScript 4.1 支持在像 React 這樣的 JSX 環境中進行類型檢查:

遞歸條件類型

另一個新增功能是遞歸條件類型,它允許它們在分支中引用自己,從而能夠更靈活地處理條件類型,使得編寫遞歸類型別名更加容易。下面是一個使用 Awaited 展開深層嵌套的 Promise 的示例:

  1. type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T; 
  2.  
  3. // 類似 `promise.then(...)`, 但是在類型上更加精確 
  4. declare function customThen<T, U>( 
  5.     p: Promise<T>, 
  6.     onFulfilled: (value: Awaited<T>) => U 
  7. ): Promise<Awaited<U>>; 

但是應當注意的是,TypeScript 需要更多時間來進行遞歸類型的類型檢查。Microsoft 警告,應以負責任的態度謹慎使用它們。

Checked indexed accesses 索引訪問檢查

_ TypeScript 中的索引簽名允許可以像下面的 Options 接口中那樣訪問任意命名的屬性:

  1. interface Options { 
  2.   path: string; 
  3.   permissions: number; 
  4.  
  5.   // Extra properties are caught by this index signature. 
  6.   // 額外的屬性將被這個 
  7.   [propName: string]: string | number; 
  8.  
  9. function checkOptions(opts: Options) { 
  10.   opts.path; // string 
  11.   opts.permissions; // number 
  12.  
  13.   // 這些都可以!因為類型都是 string | number 
  14.   opts.yadda.toString(); 
  15.   opts["foo bar baz"].toString(); 
  16.   opts[Math.random()].toString(); 

在這里,我們看到不是 path 以及 permissions 的屬性應具有 string | number 類型:

TypeScript 4.1 提供了一個新的標志 --noUncheckedIndexedAccess,使得每次屬性訪問(如 opts.path)或索引訪問(如 opts [“ blabla”] )都可能未定義。這意味著如果我們需要訪問上一個示例中的 opts.path 之類的屬性,則必須檢查其是否存在或使用非 null 斷言運算符(后綴 ! 字符):

  1. function checkOptions(opts: Options) { 
  2.   opts.path; // string 
  3.   opts.permissions; // number 
  4.  
  5.   // 以下代碼在 noUncheckedIndexedAccess 開啟時是非法的 
  6.   opts.yadda.toString(); 
  7.   opts["foo bar baz"].toString(); 
  8.   opts[Math.random()].toString(); 
  9.  
  10.   // 檢查屬性是否真的存在 
  11.   if (opts.yadda) { 
  12.     console.log(opts.yadda.toString()); 
  13.   } 
  14.  
  15.   // 直接使用非空斷言操作符 
  16.   opts.yadda!.toString(); 

--noUncheckedIndexedAccess 標志對于捕獲很多錯誤很有用,但是對于很多代碼來說可能很嘈雜。 這就是為什么 --strict 開關不會自動啟用它的原因。

不需要 baseUrl 指定路徑

在 TypeScript 4.1 之前,要能夠使用 tsconfig.json 文件中的 paths,必須聲明 baseUrl 參數。 在新版本中,可以在不帶 paths 選項的情況下指定 baseUrl。 這解決了自動導入中路徑不暢的問題。

  1.     "compilerOptions": { 
  2.         "baseUrl""./src"
  3.         "paths": { 
  4.             "@shared": ["@shared/"] // This mapping is relative to "baseUrl" 
  5.         } 
  6.     } 

checkJs 默認打開 allowJs

如果您有一個 JavaScript 項目,正在其中使用 checkJs 選項檢查 .js 文件中的錯誤,則還應該聲明 allowJs 以允許編譯 JavaScript 文件。而 TypeScript 4.1 中,默認情況下 checkJs 意味著 allowJs:

  1.   compilerOptions: { 
  2.     allowJs: true
  3.     checkJs: true 
  4.   } 

JSDoc @see 標簽的編輯器支持

在編輯器中使用 TypeScript 時,現在對 JSDoc 標簽 @see 有了更好的支持,這將改善TypeScript 4.1的可用性:

  1. // @filename: first.ts 
  2. export class C {} 
  3.  
  4. // @filename: main.ts 
  5. import * as first from "./first"
  6.  
  7. /** 
  8.  * @see first.C 
  9.  */ 
  10. function related() {} 

不兼容改變

lib.d.ts 變動

結構和 DOM 的環境聲明,使您可以輕松地開始編寫經過類型檢查的 JavaScript 代碼。

該文件自動包含在 TypeScript 項目的編譯上下文中。 您可以通過指定 --noLib 編譯器命令行標志或在 tsconfig.json 中配置 noLib 為 true 來排除它。

在 TypeScript 4.1 中,由于 DOM 類型是自動生成的,lib.d.ts 可能具有一組變動的 API,例如,從 ES2016 中刪除的 Reflect.enumerate。

abstract 成員不能被標記為 async

在另一個重大更改中,標記為 abstract 的成員不能被再標記為 async。 因此,要修復您的代碼,必須刪除 async 關鍵字:

  1. abstract class MyClass { 
  2.   // 在 TypeScript 4.1 中必須刪除 async 
  3.   abstract async create(): Promise<string>; 

any/unknown 向外傳播

在 TypeScript 4.1 之前,對于像 foo && somethingElse 這樣的表達式, foo 的類型是 any 或 unknown。 整個表達式的類型將是 somethingElse 的類型,在以下示例中就是 {someProp:string} :

  1. declare let foo: unknown; 
  2. declare let somethingElse: { someProp: string }; 
  3. let x = foo && somethingElse; 

在 TypeScript 4.1 中, any 和 unknown 都將向外傳播,而不是在右側傳播。通常,這個變更合適的解決方法是從 foo && someExpression 切換到 !!foo && someExpression。

  • 注意:雙重感嘆號(!!)是將變量強制轉換為布爾值(真或假)的一種簡便方法。

Promise 中 resolve 的參數不再是可選類型

Promise 中 resolve 的參數不再是可選的,例如下面的代碼:

  1. new Promise((resolve) => { 
  2.   doSomethingAsync(() => { 
  3.     doSomething(); 
  4.     resolve(); 
  5.   }); 
  6. }); 

這段代碼在 TypeScript 4.1 中編譯會報錯:

  1. resolve() 
  2.   ~~~~~~~~~ 
  3. error TS2554: Expected 1 arguments, but got 0. 
  4.   An argument for 'value' was not provided. 

要解決這個問題,必須在 Promise 中給 resolve 提供至少一個值,否則,在確實需要不帶參數的情況下調用 resolve() 的情況下,必須使用顯式的 void 泛型類型參數聲明 Promise:

  1. new Promise<void>((resolve) => { 
  2.   doSomethingAsync(() => { 
  3.     doSomething(); 
  4.     resolve(); 
  5.   }); 
  6. }); 

條件展開將會創建可選屬性

在 JavaScript 中,展開運算符 { ...files } 不會作用于假值,例如 files 為 null 或者 undefined。

在以下使用條件傳播的示例中,如果定義了 file,則將傳播 file.owner 的屬性。否則,不會將任何屬性傳播到返回的對象中:

  1. function getOwner(file?: File) { 
  2.   return { 
  3.     ...file?.owner, 
  4.     defaultUserId: 123, 
  5.   }; 

在TypeScript 4.1之前, getOwner 返回基于每個展開對象的聯合類型:

  1. { x: number } | { x: number, name: string, age: number, location: string } 
  • 如果定義了 file,則會擁有來自Person(所有者的類型)的所有屬性。
  • 否則,結果中一個都不會展示

但是事實證明,這樣的代價最終會變得非常高昂,而且通常無濟于事。在單個對象中存在數百個展開對象,每個展開對象都可能增加數百或數千個屬性。 為了更好的性能,在TypeScript 4.1中,返回的類型有時使用全部可選屬性:

  1.     x:         number; 
  2.     name?:     string; 
  3.     age?:      number; 
  4.     location?: string; 

不匹配的參數將不再關聯

過去,彼此不對應的參數在 TypeScript 中通過將它們與 any 類型關聯而彼此關聯。

在下面的重載示例(為同一功能提供多種功能類型)中, pickCard 函數將根據用戶傳入的內容返回兩個不同的內容。如果用戶傳入表示 deck 的對象,則該函數將選擇 card。 如果用戶選擇了 card,他們將得到他們選擇的 card:

  1. let suits = ["hearts""spades""clubs""diamonds"]; 
  2.  
  3. function pickCard(x: { suit: string; card: number }[]): number; 
  4. function pickCard(x: number): { suit: string; card: number }; 
  5. function pickCard(x: any): any { 
  6.   // Check to see if we're working with an object/array 
  7.   // if so, they gave us the deck and we'll pick the card 
  8.   if (typeof x == "object") { 
  9.     let pickedCard = Math.floor(Math.random() * x.length); 
  10.     return pickedCard; 
  11.   } 
  12.   // Otherwise just let them pick the card 
  13.   else if (typeof x == "number") { 
  14.     let pickedSuit = Math.floor(x / 13); 
  15.     return { suit: suits[pickedSuit], card: x % 13 }; 
  16.   } 
  17.  
  18. let myDeck = [ 
  19.   { suit: "diamonds", card: 2 }, 
  20.   { suit: "spades", card: 10 }, 
  21.   { suit: "hearts", card: 4 }, 
  22. ]; 
  23.  
  24. let pickedCard1 = myDeck[pickCard(myDeck)]; 
  25. alert("card: " + pickedCard1.card + " of " + pickedCard1.suit); 
  26.  
  27. let pickedCard2 = pickCard(15); 
  28. alert("card: " + pickedCard2.card + " of " + pickedCard2.suit); 

使用 TypeScript 4.1,某些情況下賦值將會失敗,而某些情況下的重載解析則將失敗。解決方法是,最好使用類型斷言來避免錯誤。

最后一點想法

TypeScript 通過在運行代碼之前捕獲錯誤并提供修復程序來節省我們的時間。通過深入了解 TypeScript,我們可以更好地了解如何改善代碼結構,并得到解決復雜問題的方案。希望本文能夠幫助你探索類型系統,并使您的編程旅程更加精彩。

TypeScript 4.1 可以通過 NuGet 或 NPM 獲取:

  1. npm install typescript 

  

 

責任編輯:姜華 來源: 圖雀社區
相關推薦

2021-10-09 07:10:30

Go字面量組合

2023-04-14 15:44:20

TypeScrip函數重載

2022-06-08 08:01:28

模板字面量類型

2022-04-10 19:26:07

TypeScript類型語法

2021-07-27 06:06:34

TypeScript語言運算符

2021-08-18 07:56:05

Typescript類型本質

2022-04-11 08:42:09

TypeScript子類型定義

2024-05-11 10:19:31

TypeScript類型接口

2022-08-08 09:00:42

TypeScript映射類型

2021-06-09 07:55:19

Typescript類型檢查

2020-03-31 16:30:09

JS語言ES 6

2020-04-02 09:01:54

JSES 6開發

2022-03-14 08:33:09

TypeScriptJavaScript前端

2021-06-05 21:30:24

typescriptOverride檢查

2022-02-25 09:06:02

TypeScripnever工具

2021-06-01 06:00:06

typescriptjavascript

2024-08-12 08:50:17

2024-09-09 08:35:30

2024-08-22 10:51:09

Typescript場景類型

2025-09-01 07:22:10

inferTypeScripfetch
點贊
收藏

51CTO技術棧公眾號

日本电影在线观看| 亚洲一二区视频| 欧美日韩一区二区三区不卡视频| 亚洲一级在线观看| 精品国产乱码久久久久软件| 69国产精品视频免费观看| 久久av综合| 欧美久久久久久久久久| 18禁裸男晨勃露j毛免费观看| 亚洲欧洲综合在线| 另类小说一区二区三区| 欧美猛交免费看| 波多野结衣片子| 在线播放成人| 精品久久久久久久中文字幕| 亚洲一一在线| 天天躁日日躁狠狠躁喷水| 国产精品久久国产愉拍| x99av成人免费| 亚洲自拍偷拍精品| 免费高清视频在线一区| 亚洲一区二区三区爽爽爽爽爽| 欧美黑人xxxxx| 国产男男gay网站| 久久xxxx| 久久久影视精品| 91大神福利视频| 亚洲va久久久噜噜噜久久| 91精品国产色综合久久不卡蜜臀| 国产精品秘入口18禁麻豆免会员| 黄色免费在线观看| 国产亚洲一区二区三区| 国产日韩精品推荐| 国产男女猛烈无遮挡| 日韩不卡一二三区| 91禁国产网站| 久久综合久久鬼| 91综合视频| 国产一级揄自揄精品视频| 91精品啪在线观看国产| 国产一区二区三区视频在线| 欧美亚洲高清一区| 日韩一级在线免费观看| 丁香花电影在线观看完整版| 亚洲色图视频网站| 一区二区免费电影| 国产二区视频在线观看| 久久久久国产成人精品亚洲午夜| 国内一区二区在线视频观看| 性生活三级视频| 狠狠色综合色综合网络| 国产精品久久久久77777| 91国产丝袜播放在线| 亚洲电影av| 欧美高清视频免费观看| 欧美成人aaa片一区国产精品| 久久中文字幕二区| 上原亚衣av一区二区三区| 国产免费看av| 国产成人影院| 国产亚洲精品高潮| 超碰97av在线| 欧美肥老太太性生活| 中文字幕九色91在线| 中文字幕av久久爽一区| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲欧洲美洲在线综合| 国产黄片一区二区三区| 欧美日韩在线播放视频| 色综久久综合桃花网| 国产在线免费看| 久久久久久久久丰满| 久久久极品av| 九九热精品免费视频| 国产在线日韩| 2019亚洲男人天堂| 日韩电影在线观看一区二区| 日韩综合一区二区| 国产主播喷水一区二区| av一区二区三| caoporn国产一区二区| 看高清中日韩色视频| 精品久久久久一区二区三区 | 韩国中文字幕hd久久精品| 国产成人在线影院 | 超碰在线播放91| 色综合一区二区日本韩国亚洲| 欧美一卡2卡3卡4卡| 亚洲av成人片无码| 国产一区二区精品福利地址| 色婷婷久久一区二区| 在线免费日韩av| 99视频精品免费观看| 国产999精品久久久| 97国产成人无码精品久久久| 国产超碰在线一区| 欧美高清性xxxxhdvideosex| 天堂аⅴ在线地址8| 亚洲综合色噜噜狠狠| 日韩精品视频一区二区在线观看| 国产成人午夜性a一级毛片| 日韩欧美激情在线| 李宗瑞91在线正在播放| 五月婷婷六月综合| 777777777亚洲妇女| 亚洲网站在线免费观看| 粉嫩av亚洲一区二区图片| 日本一区二区三区四区在线观看| 欧美激情午夜| 婷婷夜色潮精品综合在线| 92看片淫黄大片一级| 国产精品一区二区三区www| 亚洲精品第一国产综合精品| 欧美福利在线视频| 一区二区黄色| 91手机在线视频| 酒色婷婷桃色成人免费av网| 一区二区久久久久久| 手机在线看福利| 国产精品xxxav免费视频| 色妞久久福利网| 国产无人区码熟妇毛片多| 日本午夜精品一区二区三区电影| 国产精品区二区三区日本| av播放在线观看| 精品欧美激情精品一区| 伊人av在线播放| 精品欧美激情在线观看| 97色在线视频观看| av中文字幕播放| 国产精品无圣光一区二区| 18岁网站在线观看| 伊人久久亚洲| 精品国产一区av| 国产成人a v| 99久久精品免费| 青青青在线观看视频| 日韩欧美激情| 国产亚洲精品美女| 精品免费囯产一区二区三区| 粉嫩一区二区三区性色av| 日本老太婆做爰视频| 日韩毛片免费看| 中文字幕免费精品一区高清| 无码人妻丰满熟妇区bbbbxxxx| 99久久精品一区二区| www.欧美黄色| 亚洲啊v在线免费视频| 久久av中文字幕| 国产精品探花视频| 自拍视频在线观看一区二区| 超碰超碰在线观看| 青青草国产成人a∨下载安卓| 国产成人久久久| 欧美成熟毛茸茸| 日韩欧美国产一区二区| 双性尿奴穿贞c带憋尿| 亚洲激情国产| 国产一区二区三区四区hd| av老司机免费在线| 亚洲第一页在线| 男人的天堂一区二区| 成人va在线观看| 国产欧美日韩网站| 日韩欧美美女在线观看| 欧洲亚洲女同hd| 国产系列在线观看| 欧美制服丝袜第一页| 久久精品色妇熟妇丰满人妻| 麻豆久久一区二区| www婷婷av久久久影片| 2023国产精华国产精品| 韩国日本不卡在线| 黄色av免费在线看| 欧美日韩日日摸| 全网免费在线播放视频入口| 国产福利电影一区二区三区| www.日本在线播放| 精品国产乱码| 成人免费在线网址| 日韩成人伦理| 亚洲精品色婷婷福利天堂| 天天天天天天天干| 亚洲精品免费电影| 中文在线永久免费观看| 日韩精品91亚洲二区在线观看| 亚洲欧美综合一区| 成人激情自拍| 欧美最猛性xxxxx免费| 在线视频三区| 日韩精品一区二区三区四区| 亚洲 欧美 视频| 日本一区二区三区四区| 亚洲av无码久久精品色欲| 国产日韩1区| 中文字幕久精品免| 日韩极品在线| 成人精品福利视频| 日本在线影院| 日韩亚洲精品视频| 天天av天天翘| 欧美夫妻性生活| 日韩av大片在线观看| 国产精品国产三级国产aⅴ入口 | 国产一区二区不卡| 欧美日韩亚洲一| 久久亚洲国产| 久久久久久久久久久久久久久久av | 久久99久久久久久| 精品美女在线视频| 激情伦成人综合小说| 视频欧美精品| 日韩美女激情视频| segui88久久综合| 日韩在线观看免费网站| 日韩三级电影网| 欧美大肚乱孕交hd孕妇| 中文字幕男人天堂| 欧美日韩国产激情| 538任你躁在线精品视频网站| 国产亚洲精品精华液| 国产一级免费片| 精品一区二区成人精品| 黄色片久久久久| 在线欧美视频| 日韩不卡视频一区二区| 日韩在线欧美| 欧美日本国产精品| 另类春色校园亚洲| 91免费看网站| www.成人| 国产欧美日韩精品丝袜高跟鞋| 成人bbav| 欧美激情免费在线| gogogogo高清视频在线| 色久欧美在线视频观看| 成人在线免费电影| 亚洲片在线资源| 亚洲人成色777777精品音频| 精品粉嫩超白一线天av| www.av在线.com| 欧美日韩精品一区二区三区四区| 亚洲 日本 欧美 中文幕| 欧美日韩在线影院| 欧美另类一区二区| 五月婷婷久久综合| 国产午夜久久久| 亚洲综合一区二区精品导航| 黄色一级视频免费| 亚洲欧美日韩国产综合在线| 日本免费网站视频| 中文字幕永久在线不卡| 战狼4完整免费观看在线播放版| 久久久久国产精品人| 国产色视频一区二区三区qq号| 久久这里只精品最新地址| 丰满少妇一区二区三区| 91麻豆视频网站| 爱爱免费小视频| 久久久不卡网国产精品一区| 能免费看av的网站| 久久久久国产一区二区三区四区| 免费观看av网站| 国产日韩亚洲欧美综合| 国产精品无码无卡无需播放器| 欧美激情一区二区三区全黄| 手机看片国产日韩| 亚洲天堂成人在线观看| 一区二区视频免费看| 亚洲激情五月婷婷| 国产91av视频| 一本大道综合伊人精品热热| 亚洲精品一区二三区| 欧美精品一级二级三级| www.色婷婷.com| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩一区二区三区四区| 99国产成人精品| 欧美成人女星排名| 青草久久伊人| 最近2019年日本中文免费字幕| 成人av福利| 69av视频在线播放| 成人国产一区二区三区精品麻豆| 91色精品视频在线| 久久精品国产亚洲5555| 亚州欧美一区三区三区在线| 我不卡影院28| 欧洲黄色一级视频| 久久99精品久久久久久久久久久久| 欧美人与性动交α欧美精品| av高清久久久| 91无套直看片红桃在线观看| 亚洲一级二级三级| 中国女人真人一级毛片| 日韩欧美一区在线| 蝌蚪视频在线播放| 欧美国产精品va在线观看| 成人av观看| 亚洲最大成人网色| 国产精品一区二区99| 久久久久福利视频| 久久婷婷久久| 成人啪啪18免费游戏链接| 久久精品日韩一区二区三区| 久久久久亚洲AV| 欧美视频在线播放| 天天操天天干天天舔| 日韩最新免费不卡| 日韩av影片| 1卡2卡3卡精品视频| 欧洲激情综合| www.日本在线播放| 国产一区二区在线影院| 高潮毛片无遮挡| 亚洲福利视频一区二区| 一级黄色片网站| 亚洲区在线播放| 黑人另类精品××××性爽| 国产在线日韩在线| 在线视频亚洲专区| 久久这里只有精品18| 久久国产精品99精品国产| 免费看污黄网站在线观看| 一区二区三区精品在线| 一本色道久久综合亚洲| 亚洲天堂av在线播放| 日韩三级电影视频| 成人看片人aa| 日本高清免费电影一区| 国产日产欧美视频| 成人黄色a**站在线观看| 久久国产高清视频| 欧美日韩综合在线| а天堂8中文最新版在线官网| 国产91对白在线播放| av一级亚洲| 无码人妻精品一区二区蜜桃百度| 美女网站一区二区| 日本免费www| 色狠狠色狠狠综合| 欧美精品a∨在线观看不卡| 18一19gay欧美视频网站| 成人h动漫免费观看网站| 日韩久久久久久久久久久久| 国内成人精品2018免费看| 精品一区二区在线观看视频| 欧美综合在线视频| 国产福利在线| 国产美女精品视频免费观看| 操欧美老女人| 亚洲天堂2018av| 国产精品丝袜一区| 在线观看视频二区| 日韩亚洲欧美成人| 国产人与zoxxxx另类91| 91制片厂免费观看| 国产一区二区精品久久91| 天堂网avav| 日韩精品一区二区三区视频播放 | 亚洲AV无码国产精品午夜字幕| 欧美日韩成人在线播放| 国产伦理久久久久久妇女| 亚洲美免无码中文字幕在线| 26uuu成人网一区二区三区| 日韩不卡视频在线| 亚洲天堂免费观看| 国产亚洲人成a在线v网站| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲精品一二三**| 欧美深夜福利视频| 久久久亚洲国产美女国产盗摄| 波多野结衣午夜| 日韩少妇与小伙激情| 136福利精品导航| 北条麻妃69av| 国产精品久久毛片| 精品美女www爽爽爽视频| 97热精品视频官网| 国产一区二区三区不卡视频网站| 国产三级三级看三级| 亚洲精品中文在线影院| 欧美特级特黄aaaaaa在线看| 日本一本a高清免费不卡| 欧美电影免费观看高清| 熟妇高潮一区二区| 色播五月激情综合网| 国产精品刘玥久久一区| 国产视频一区二区不卡| 日韩成人一区二区三区在线观看| 国产高潮流白浆| 亚洲精品99久久久久| 国产精品久久久久久吹潮| av日韩在线看| 国产日本欧美一区二区| 国产女人18毛片水真多| 2018日韩中文字幕| 99视频精品全国免费| 国产精品嫩草av| 欧美丰满一区二区免费视频|