日日夜夜一区二区_欧美体内she精视频_91亚洲大成网污www_日韩欧美中文字幕精品_亚洲午夜久久久久久久久电影院_蜜桃av一区二区_久久狠狠亚洲综合_国产成人精品亚洲777人妖_九九精品视频在线看_国产婷婷色一区二区三区四区 _ww久久中文字幕_日本亚洲免费观看_91久久精品午夜一区二区_久久精品视频免费观看_亚洲精品伦理在线_日本在线不卡一区

環(huán)球熱議:函數(shù)返回值類(lèi)型優(yōu)化,JSX 增強(qiáng),TypeScript 5.1 發(fā)布!

時(shí)間:2023-06-09 06:10:56 來(lái)源: CSDN


譯者 | 禾木木 責(zé)編 | 夏萌

出品 | CSDN(ID:CSDNnews)


(資料圖片僅供參考)

近日,微軟宣布正式發(fā)布 TypeScript 5.1 版本。

如果你還不熟悉 TypeScript,它是一種建立在 JavaScript 基礎(chǔ)上的語(yǔ)言,通過(guò)添加靜態(tài)類(lèi)型語(yǔ)法來(lái)構(gòu)建的語(yǔ)言。這些類(lèi)型可以描述我們程序的一些細(xì)節(jié),可以使用 TypeScript 對(duì)代碼進(jìn)行類(lèi)型檢查,并在運(yùn)行代碼之前告訴你代碼錯(cuò)誤的相關(guān)信息。

此外,你還可以使用 TypeScript 編譯器從代碼中剝離類(lèi)型,并為你提供可在任何地方運(yùn)行的簡(jiǎn)潔易讀的 JavaScript 代碼。除了類(lèi)型檢查之外,TypeScript 還使用靜態(tài)類(lèi)型來(lái)支持強(qiáng)大的編輯器工具,例如自動(dòng)完成、代碼導(dǎo)航、重構(gòu)等。

如果你在 Visual Studio Code 或 Visual Studio 這樣的編輯器中使用過(guò) JavaScript,那么你已經(jīng)用上了類(lèi)型和 TypeScript 帶來(lái)的體驗(yàn)。

如果你已經(jīng)在項(xiàng)目中使用 TypeScript,則可以通過(guò) NuGet 獲取它,也可以通過(guò)以下命令使用 npm 獲取:

npm install -D typescript

以下是 TypeScript 5.1 版本中新增的主要功能:

更容易實(shí)現(xiàn) undefined 函數(shù)的返回值類(lèi)型

getter 和 setter 支持設(shè)置不同類(lèi)型

JSX 元素和 JSX 標(biāo)簽類(lèi)型之間解耦類(lèi)型檢查

帶命名空間的 JSX 標(biāo)簽

typeRoots 在模塊解析中被查詢(xún)

JSX 標(biāo)簽支持鏈接光標(biāo)

@Param JSDoc 標(biāo)簽中支持代碼補(bǔ)全

優(yōu)化

重大變更

Beta 版本和 RC 版有哪些新變化?

Beta 版以后,糾正了裝飾器中 init 鉤子的一些行為,并作出調(diào)整。還對(duì) isolatedModules 下的 emit 行為進(jìn)行了修改,以確保腳本文件不會(huì)被重寫(xiě)為模塊。這也意味著使用 transpileModule API 不會(huì)將腳本文件被解釋為模塊,因?yàn)樗俣ㄊ褂昧?isolatedModules。

RC 版以后,對(duì)內(nèi)置重構(gòu)進(jìn)行了輕微的迭代。但,實(shí)現(xiàn)仍然需要一些改進(jìn)。因此,你現(xiàn)在可能無(wú)法在大多數(shù)編輯器中訪(fǎng)問(wèn)它,只能通過(guò)使用 TypeScript 的夜間版本來(lái)選擇。預(yù)計(jì) TypeScript 5.2 或 TypeScript 5.1 的未來(lái)補(bǔ)丁版本將重新引入這種重構(gòu)。

更容易實(shí)現(xiàn) undefined 函數(shù)的返回值類(lèi)型

在 JavaScript 中,如果函數(shù)在執(zhí)行過(guò)程中沒(méi)有返回值,就會(huì)返回 undefined:

function foo ( ) { // no return}

// x = undefinedlet x = foo ( ) ;

然而,在以前版本的 TypeScript 中,只有返回值類(lèi)型為 void 和 any 的函數(shù)可以沒(méi)有 return 語(yǔ)句。這意味著即使明確知道這個(gè)函數(shù)是返回 undefined 的,也需要至少有一個(gè) return 語(yǔ)句。

// fine - we inferred that "f1" returns "void"function f1 ( ) { // no returns}

// fine - "void" doesn"t need a return statementfunction f2 ( ) : void { // no returns}

// fine - "any" doesn"t need a return statementfunction f3 ( ) : any { // no returns}

// error!// A function whose declared type is neither "void" nor "any" must return a value.function f4 ( ) : undefined { // no returns}

如果某個(gè) API 希望函數(shù)返回 undefined。在以前的版本中,可能需要顯式返回一個(gè) undefined 或者顯式添加一個(gè) return 語(yǔ)句。

declare function takesFunction ( f: ( ) => undefined ) : undefined;

// error! // Argument of type " ( ) => void" is not assignable to parameter of type " ( ) => undefined".takesFunction ( ( ) => { // no returns} ) ;

// error!// A function whose declared type is neither "void" nor "any" must return a value.takesFunction ( ( ) : undefined => { // no returns} ) ;

// error!// Argument of type " ( ) => void" is not assignable to parameter of type " ( ) => undefined".takesFunction ( ( ) => { return;} ) ;

// workstakesFunction ( ( ) => { return undefined;} ) ;

// works takesFunction ( ( ) : undefined => { return;} ) ;

這種行為令人困惑,尤其是在調(diào)用無(wú)法控制的函數(shù)時(shí)。理解推斷 void 和 undefined 之間的相互作用,以及一個(gè)返回 undefined 的函數(shù)是否需要一個(gè) return 語(yǔ)句等。

在 TypeScript 5.1 中,允許返回 undefined 的函數(shù)沒(méi)有 return 語(yǔ)句。如下所示:

// worksfunction f4 ( ) : undefined { // no returns}// workstakesFunction ( ( ) : undefined => { // no returns} ) ;

如果函數(shù)沒(méi)有 return 并且被傳遞給期望返回 undefined 的函數(shù)參數(shù),TypeScript 會(huì)推斷該函數(shù)的返回類(lèi)型為 undefined。

// Works in TypeScript 5.1!takesFunction ( function f ( ) { // ^ return type is undefined // no returns} ) ;// Works in TypeScript 5.1!takesFunction ( function f ( ) { // ^ return type is undefined return;} ) ;

為了解決另一個(gè)類(lèi)似的痛點(diǎn),在 TypeScript 的 --noImplicitReturns 選項(xiàng)下,僅返回 undefined 的函數(shù)現(xiàn)在具有與 void 類(lèi)似的異常,因?yàn)椴⒎敲總€(gè)代碼路徑都必須以顯式 return 結(jié)束。

// Works in TypeScript 5.1 under "--noImplicitReturns"!function f ( ) : undefined { if ( Math.random ( ) ) { // do some stuff... return; }}

getter 和 setter 支持設(shè)置不同類(lèi)型

TypeScript 4.3 使得 get 和 set 訪(fǎng)問(wèn)器對(duì)可以指定兩種不同的類(lèi)型成為可能。

interface Serializer { set value ( v: string | number | boolean ) ; get value ( ) : string;}

declare let box: Serializer;

// Allows writing a "boolean"box.value = true;

// Comes out as a "string"console.log ( box.value.toUpperCase ( ) ) ;

最初要求 get 類(lèi)型必須是 set 類(lèi)型的子類(lèi)型。意味著以下的代碼是合理的:

box.value = box.value;

但是,有許多現(xiàn)有的和提議的 API 在它們的 getter 和 setter 之間具有完全不相關(guān)的類(lèi)型。

TypeScript 5.1 現(xiàn)在允許 get 和 set 訪(fǎng)問(wèn)器屬性設(shè)置不同的類(lèi)型,前提是它們具有顯式類(lèi)型注釋。雖然此版本的 TypeScript 尚未更改這些內(nèi)置接口的類(lèi)型,但現(xiàn)在可以通過(guò)以下方式定義:

interface CSSStyleRule { get style ( ) : CSSStyleDeclaration; set style ( newValue: string ) ;}

也允許其他模式的使用,但如果某些基礎(chǔ)狀態(tài)尚未初始化,則訪(fǎng)問(wèn)器可以返回。

class SafeBox { #value: string | undefined;

// 只接受字符串 set value ( newValue: string ) {

// 必須檢查 undefined get value ( ) : string | undefined { return this.#value; }}

實(shí)際上,這與在 --exactOptionalProperties 下檢查可選屬性的方式類(lèi)似。

JSX 元素和 JSX 標(biāo)簽類(lèi)型之間解耦類(lèi)型檢查

TypeScript 在處理 JSX 時(shí)的一個(gè)痛點(diǎn)是對(duì)每個(gè) JSX 元素標(biāo)簽類(lèi)型的要求。而這個(gè)版本使得 JSX 庫(kù)能夠更準(zhǔn)確地描述 JSX 組件的返回類(lèi)型。對(duì)于很多人來(lái)說(shuō),這具體意味著可以在 React 中使用異步服務(wù)器組件。

例如,有以下 JSX 元素:

// A self-closing JSX tag

// A regular element with an opening/closing tag

當(dāng)對(duì) 進(jìn)行類(lèi)型檢查時(shí),TypeScript 總是會(huì)查找名為 JSX 的命名空間,并從中獲取一個(gè)名為 Element 的類(lèi)型,也就是在查找 JSX.Element。

但是,為了檢查 Foo 或 Bar 本身是否是有效的標(biāo)簽名稱(chēng),TypeScript 會(huì)粗略地獲取由 Foo 或 Bar 返回或構(gòu)造的類(lèi)型,并檢查與 JSX.Element 的兼容性(或者如果類(lèi)型是可構(gòu)造的,則檢查另一種稱(chēng)為 JSX.ElementClass 的類(lèi)型)。

這個(gè)限制意味著如果組件返回比 JSX.Element 更廣泛的類(lèi)型,則無(wú)法使用組件。

舉一個(gè)具體的例子,React 的未來(lái)版本提議對(duì)返回 Promise 的組件提供有限支持,但是現(xiàn)有版本的 TypeScript 無(wú)法表達(dá)這種類(lèi)型,除非徹底放寬 JSX.Element 的類(lèi)型限制。

import * as React from "react";

async function Foo ( ) { return

;}let element = ;// ~~~// "Foo" cannot be used as a JSX component.// Its return type "Promise" is not a valid JSX element.

為了向庫(kù)提供一種表達(dá)方式,TypeScript 5.1 現(xiàn)在會(huì)查找名為 JSX.ElementType 的類(lèi)型。ElementType 精確指定什么可以有效用作 JSX 元素中的標(biāo)簽。因此,它可能會(huì)被定義為類(lèi)似于以下這樣:

namespace JSX { export type ElementType = // All the valid lowercase tags keyof IntrinsicAttributes // Function components ( props: any ) => Element // Class components new ( props: any ) => ElementClass;

export interface IntrinsictAttributes extends /*...*/ {} export type Element = /*...*/; export type ClassElement = /*...*/;}

命名空間的 JSX 標(biāo)簽

在使用 JSX 時(shí),可以使用帶命名空間的屬性名。

import * as React from "react";

// Both of these are equivalent:const x = ;const y = ;

interface FooProps { "a:b": string;}

function Foo ( props: FooProps ) { return

{props [ "a:b" ] }
;}

當(dāng)名稱(chēng)的第一部分是小寫(xiě)字母時(shí),JSX.IntrinsicAttributes 上的命名空間屬性名會(huì)以類(lèi)似的方式進(jìn)行查找。

// In some library"s code or in an augmentation of that library:namespace JSX { interface IntrinsicElements { [ "a:b" ] : { prop: string }; }}

// In our code:let x = ;

typeRoots 在模塊解析中被查詢(xún)

當(dāng) TypeScript 指定的模塊查找策略無(wú)法解析路徑時(shí),它現(xiàn)在將解析相對(duì)于指定 typeRoots 的包。

引入 JSX 標(biāo)簽中鏈接光標(biāo)

TypeScript 現(xiàn)在支持 JSX 標(biāo)簽名稱(chēng)的鏈接編輯。允許編輯器自動(dòng)同時(shí)編輯多個(gè)位置。

這項(xiàng)新功能應(yīng)該適用于 TypeScript 和 JavaScript 文件,并且可以在 Visual Studio Code Insiders 中啟用。在 Visual Studio Code 中,勾選 Editor: Linked Editing 選項(xiàng)即可啟用:

或者在 JSON 設(shè)置文件中配置 editor.linkedEditing:

{ // ... "editor.linkedEditing": true,}

Visual Studio 17.7 Preview 1 也將支持此功能。

@Param JSDoc 標(biāo)簽中支持代碼補(bǔ)全

在 TypeScript 和 JavaScript 文件中輸入 @param 標(biāo)簽時(shí),TypeScript 現(xiàn)在提供代碼補(bǔ)全。

優(yōu)化

避免不必要的類(lèi)型實(shí)例化

TypeScript 5.1 現(xiàn)在避免在已知不包含對(duì)外部類(lèi)型參數(shù)的引用的對(duì)象類(lèi)型中執(zhí)行類(lèi)型實(shí)例化。這有可能減少許多不必要的計(jì)算,并將 material-ui 的文檔目錄的類(lèi)型檢查時(shí)間減少 50% 以上。

通過(guò)減少不必要的類(lèi)型實(shí)例化,TypeScript 5.1 在類(lèi)型檢查方面提供了更高的效率。尤其是在具有復(fù)雜類(lèi)型層級(jí)或大型代碼庫(kù)的情況下,可以顯著提高類(lèi)型檢查的性能。

聯(lián)合字面量類(lèi)型檢查優(yōu)化

在檢查源類(lèi)型是否屬于聯(lián)合類(lèi)型時(shí),TypeScript 首先將使用該源類(lèi)型的內(nèi)部類(lèi)型標(biāo)識(shí)符進(jìn)行快速查找。如果查找失敗,則 TypeScript 會(huì)針對(duì)聯(lián)合類(lèi)型中的每種類(lèi)型檢查其兼容性。當(dāng)將字面類(lèi)型與僅包含字面類(lèi)型的聯(lián)合類(lèi)型相關(guān)聯(lián)時(shí),TypeScript 現(xiàn)在可以避免針對(duì)聯(lián)合類(lèi)型中的每種其他類(lèi)型進(jìn)行完整遍歷。

這種優(yōu)化可以將此問(wèn)題中的代碼的類(lèi)型檢查時(shí)間從約 45 秒減少到約 0.4 秒。

在解析 JSDoc 時(shí),減少對(duì)掃描器的調(diào)用

在舊版本的 TypeScript 中,解析 JSDoc 注釋時(shí)會(huì)使用掃描器 / 標(biāo)記器將注釋分解為細(xì)粒度的標(biāo)記,并將內(nèi)容重新組合。這在規(guī)范化注釋文本方面可能是有幫助的,例如多個(gè)空格會(huì)被合并為一個(gè)空格,但這種方法會(huì)導(dǎo)致解析器和掃描器之間頻繁的跳轉(zhuǎn),增加了 JSDoc 解析的開(kāi)銷(xiāo)。

TypeScript 5.1 對(duì)將 JSDoc 注釋分解為掃描器 / 分詞器中的內(nèi)容更改了邏輯。掃描器現(xiàn)在將更大的內(nèi)容塊直接返回給解析器,以便根據(jù)需要進(jìn)行處理。

這些更改已將幾個(gè) 10Mb 的主要是注釋的 JavaScript 文件的解析時(shí)間縮短了大約一半。

重大變更

ES2020 和 Node.js 14.17 作為最低運(yùn)行時(shí)要求

TypeScript 5.1 現(xiàn)在包含了在 ECMAScript 2020 中引入的 JavaScript 功能。因此,TypeScript 至少需要在一個(gè)相對(duì)較新的運(yùn)行時(shí)環(huán)境下運(yùn)行。對(duì)于大多數(shù)用戶(hù)來(lái)說(shuō),這意味著 TypeScript 現(xiàn)在只能在 Node.js 14.17 及更高版本上運(yùn)行。

如果你嘗試在較舊版本的 Node.js(如 Node 10 或 12)上運(yùn)行 TypeScript 5.1,可能會(huì)遇到以下錯(cuò)誤,無(wú)論是運(yùn)行 tsc.js 還是 tsserver.js:

node_modules/typescript/lib/tsserver.js:2406 for ( let i = startIndex ?? 0; i < array.length; i++ ) { ^SyntaxError: Unexpected token "?" at wrapSafe ( internal/modules/cjs/loader.js:915:16 ) at Module._compile ( internal/modules/cjs/loader.js:963:27 ) at Object.Module._extensions..js ( internal/modules/cjs/loader.js:1027:10 ) at Module.load ( internal/modules/cjs/loader.js:863:32 ) at Function.Module._load ( internal/modules/cjs/loader.js:708:14 ) at Function.executeUserEntryPoint [ as runMain ] ( internal/modules/run_main.js:60:12 ) at internal/main/run_main_module.js:17:47

此外,如果你嘗試安裝 TypeScript,你將會(huì)收到類(lèi)似以下的錯(cuò)誤信息:

npm WARN EBADENGINE Unsupported engine {npm WARN EBADENGINE package: "typescript@5.1.3",npm WARN EBADENGINE required: { node: ">=14.17" },npm WARN EBADENGINE current: { node: "v12.22.12", npm: "8.19.2" }npm WARN EBADENGINE }

來(lái)自 Yarn:

error typescript@5.1.3: The engine "node" is incompatible with this module. Expected version ">=14.17". Got "12.22.12"error Found incompatible module.

顯式指定了 typeRoots 后,將禁用對(duì) node_modules/@types 的向上查找

以前,在 tsconfig.json 中指定了 typeRoots 選項(xiàng)但無(wú)法解析到任何 typeRoots 目錄時(shí),TypeScript 仍然會(huì)繼續(xù)向上遍歷父目錄,嘗試在每個(gè)父目錄的 node_modules/@types 文件夾中解析包。

這種行為可能導(dǎo)致過(guò)多的查找,并且在 TypeScript 5.1 中已被禁用。因此,您可能會(huì)開(kāi)始看到類(lèi)似以下錯(cuò)誤的錯(cuò)誤,這是基于您的 tsconfig.json 中的 types 選項(xiàng)或 /// 指令的條目而產(chǎn)生的:

error TS2688: Cannot find type definition file for "node".error TS2688: Cannot find type definition file for "mocha".error TS2688: Cannot find type definition file for "jasmine".error TS2688: Cannot find type definition file for "chai-http".error TS2688: Cannot find type definition file for "webpack-env"".

解決方案通常是在您的 typeRoots 中添加針對(duì) node_modules/@types 的特定條目:

{ "compilerOptions": { "types": [ "node", "mocha" ] , "typeRoots": [ // Keep whatever you had around before. "./some-custom-types/", // You might need your local "node_modules/@types". "./node_modules/@types", // You might also need to specify a shared "node_modules/@types" // if you"re using a "monorepo" layout. "../../node_modules/@types", ] }}

以上就是 TypeScript 5.1 的穩(wěn)定版本所更新的內(nèi)容,此外,微軟項(xiàng)目團(tuán)隊(duì)已經(jīng)在努力開(kāi)發(fā) TypeScript 5.2 版本,如果你想知道更多關(guān)于 TypeScript 5.1 版本的信息,可查看發(fā)布說(shuō)明。

參考鏈接:

https://devblogs.microsoft.com/typescript/announcing-typescript-5-1/

關(guān)鍵詞:

網(wǎng)站簡(jiǎn)介 網(wǎng)站團(tuán)隊(duì) 本網(wǎng)動(dòng)態(tài) 友情鏈接 版權(quán)聲明 我要投稿

Copyright? 2014-2020 中原網(wǎng)視臺(tái)(m.b4dc4.cn) All rights reserved.

日日夜夜一区二区_欧美体内she精视频_91亚洲大成网污www_日韩欧美中文字幕精品_亚洲午夜久久久久久久久电影院_蜜桃av一区二区_久久狠狠亚洲综合_国产成人精品亚洲777人妖_九九精品视频在线看_国产婷婷色一区二区三区四区 _ww久久中文字幕_日本亚洲免费观看_91久久精品午夜一区二区_久久精品视频免费观看_亚洲精品伦理在线_日本在线不卡一区

                麻豆成人小视频| 成人爽a毛片一区二区免费| 精品国产免费一区二区三区四区 | 日韩一区二区三| 国精产品一区一区三区mba桃花| 日本中文一区二区三区| 日本大胆欧美人术艺术动态| 日本怡春院一区二区| 奇米色一区二区三区四区| 日韩成人一级大片| 国产在线乱码一区二区三区| 国产精品一级黄| 99国产精品久久久久久久久久| 99久久国产综合精品麻豆| 91天堂素人约啪| 国产伦精品一区二区三区免费视频| 久久久久久久久四区三区| 日韩欧美在线一区二区| 自拍偷拍99| 欧美午夜一区二区| 精品日韩成人av| 国产精品久久久久久久岛一牛影视 | 午夜精品爽啪视频| 激情六月婷婷久久| 91国产在线免费观看| 国产精品国色综合久久| 欧美三级电影在线播放| 欧美在线999| 久久久久久影视| 亚洲精品网站在线观看| 日本中文字幕一区二区视频 | 国产精品一区久久久久| 95精品视频在线| 日本一区视频在线| 欧美美女黄视频| 国产精品久久久99| 另类人妖一区二区av| 色网综合在线观看| 欧美日韩国产在线观看| 欧美国产日韩在线观看| 首页国产欧美久久| 95精品视频在线| 亚洲一区在线直播| 精品国产制服丝袜高跟| 亚洲成人综合视频| 成人免费毛片高清视频| 日日噜噜噜噜夜夜爽亚洲精品| 制服.丝袜.亚洲.中文.综合| 成人欧美一区二区三区黑人麻豆 | 成人97人人超碰人人99| 日韩电影免费观看在| 91精品国产91久久久久久最新毛片| 亚洲视频在线一区二区| 国产一区二区福利| 日韩精品欧美专区| 久久日韩粉嫩一区二区三区| 日韩电影在线看| 国产伦精品一区二区三区高清| 在线观看日韩片| 国产欧美1区2区3区| 精品一区二区影视| 日本视频精品一区| 亚洲精品一区二区三区四区高清 | 1024精品合集| 国产99久久久久久免费看农村| 欧美日韩高清免费| 精品福利在线导航| 久久精品国产在热久久| 欧美日韩成人一区二区三区 | 蜜桃一区二区三区在线观看| 亚洲欧洲日韩在线| 久久电影国产免费久久电影| 狼狼综合久久久久综合网| 欧美一级黄色大片| 青草av.久久免费一区| 精品一区久久| 久久免费看少妇高潮| 国产一区在线观看视频| 亚洲ai欧洲av| 亚洲视频在线一区| 91麻豆蜜桃| 欧美不卡一区二区三区| 久久激情综合网| 亚洲视频小说| 亚洲一级电影视频| 麻豆传媒一区二区| 亚洲国产精品成人久久综合一区| 成人一区二区视频| 欧美一卡2卡三卡4卡5免费| 美日韩黄色大片| 中文字幕一区二区中文字幕 | 福利一区在线观看| 欧美无砖专区一中文字| 日韩电影在线一区| 亚洲午夜精品国产| 亚洲电影一区二区| 日韩欧美在线观看强乱免费| 亚洲精品一卡二卡| 日本精品一区二区三区视频 | 成人深夜福利app| 欧美一区二区在线免费观看| 精品制服美女丁香| 欧美性猛交一区二区三区精品| 日韩电影一区二区三区| 亚洲精品一区二区毛豆| 亚洲一二三四久久| 日韩精品一区二区三区四区五区| 亚洲欧美一区二区三区孕妇| 久久久99国产精品免费| 亚洲乱码中文字幕| 色狠狠久久av五月综合| 亚洲精品国产精品久久| 一区二区三区在线免费视频| 欧美在线激情| 丝瓜av网站精品一区二区| 在线免费观看日本欧美| 激情综合色播激情啊| 正在播放一区二区| 99热这里都是精品| 亚洲国产精品ⅴa在线观看| 久久99精品久久久久久久久久| 综合中文字幕亚洲| 视频一区国产精品| 毛片不卡一区二区| 欧美一区二区在线免费播放 | 激情五月激情综合网| 宅男噜噜噜66一区二区66| 粉嫩欧美一区二区三区高清影视| 精品人在线二区三区| 1区1区3区4区产品乱码芒果精品| 欧美激情一区二区三区全黄| 欧美日韩亚洲一区二区三区在线观看| 亚洲五码中文字幕| 欧美视频自拍偷拍| 91丝袜高跟美女视频| 国产精品黄色在线观看| 亚洲最大色综合成人av| 国产乱码精品一区二区三区av| 久久久久久99久久久精品网站| 九色视频成人porny| 日本女优在线视频一区二区| 91精品国产综合久久久久久漫画| 91成人免费观看| 日韩专区中文字幕一区二区| 欧美变态tickle挠乳网站| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 亚洲毛片av在线| 一区二区三区视频| 成人av电影观看| 一区二区三区日韩欧美精品| 欧美一区二区三区在线电影| 久久综合九色99| 国产精品一区久久久久| 亚洲男人的天堂在线观看| 欧美精品乱码久久久久久按摩| 99精彩视频在线观看免费| 天天av天天翘天天综合网色鬼国产 | 国产精品一区二区x88av| 日本一区二区免费在线 | 欧美在线观看视频在线| 91嫩草免费看| 亚洲成人在线网站| 久久久久久亚洲综合| 牛人盗摄一区二区三区视频| 免费成人在线影院| 欧美日韩国产综合一区二区三区| 国产精品久久一区二区三区| 视频一区视频二区中文字幕| 日韩午夜激情视频| 久久久福利视频| 韩国理伦片一区二区三区在线播放| 久久免费的精品国产v∧| 亚洲午夜精品久久久久久浪潮| 国产超碰91| 国内成人精品2018免费看| 国产精品理论片| 欧美日韩一卡二卡三卡| 欧洲亚洲一区二区| 成人久久视频在线观看| 洋洋av久久久久久久一区| 亚洲一区二区高清视频| 国产精品永久入口久久久| 麻豆成人在线观看| 亚洲欧洲成人精品av97| 一本大道久久a久久精品综合| 国产精品久久亚洲| 国产黄色成人av| 亚洲6080在线| 国产乱码精品一区二区三区日韩精品| 精品综合免费视频观看| 国产精品视频一区二区三区经| 石原莉奈在线亚洲二区| 亚洲一区视频在线| 日韩免费看的电影| 中文字幕一区二区三区最新| 精品sm捆绑视频| 一本大道综合伊人精品热热| 精品久久久久久综合日本 | 国产成人精品免费在线| 亚洲老司机在线|