精华内容
下载资源
问答
  • 由M3U8(TS)或MPD(M4S)获取视频

    千次阅读 2021-02-10 20:46:12
    下面分别谈谈怎么由m3u8(ts)或mpd(m4s)获取视频。 1.m3u8 方法一:用ffmpeg提取、合并m3u8中的ts视频。这个方法我有的时候成功,有的时候出错,就不介绍了。 方法二:用文本编辑器(比如记事本、notepad++等)打开*...

     

    现在许多视频网站都将视频切片进行实时流传输。我遇到过两种描述文件:m3u8和mpd。下面分别谈谈怎么由m3u8(ts)或mpd(m4s)获取视频。

    1.m3u8

    方法一:用ffmpeg提取、合并m3u8中的ts视频。这个方法我有的时候成功,有的时候出错,就不介绍了。

    方法二:用文本编辑器(比如记事本、notepad++等)打开*.m3u8文件,里边可能记录了不同分辨率的.m3u8地址,也有可能是一连串命名规律的.ts视频地址。如果里边没有.ts的视频地址,则选择我们需要的分辨率的.m3u8下载,直到获取.ts视频地址,用批量下载工具(比如Internet Download Manager、浏览器插件Chrono下载管理器等)下载.ts视频,最后在cmd中把它们合并成一个视频,合并代码是copy /b   文件1+文件2+...+文件名n   输出后的文件名,例如copy /b d:\*.ts combine.ts(*表示批量处理即合并文件夹下所有的ts文件)。这样就大功告成了!

    如果我没有m3u8文件,可以打开浏览器,按f12调出开发者工具,选择network,然后打开视频页面,在network下看看有没有加载m3u8。你也有可能看到一堆.ts的链接,那么获取其中一个ts的地址,再把视频进度条拉倒最后,查看最后一次加载的ts地址,通过这两个地址,我们可以得到这一系列ts的命名规律,用批量下载工具下载它们,最后在cmd中用上面的方法合成就可以了!

    如果我不想下载完整的视频,而只想截取其中的几分钟,我通常的做法是只下载m3u8文件,用PotPlayer打开,利用PotPlayer的录制视频功能得到需要的片段,这样不需要下载完整的视频浪费等待的时间或流量,也省去了合并ts这一步骤。

    利用ffmpeg下载m3u8文件,命令与参数讲解。

    • ffmpeg -i https://host/index.m3u8 -c copy moguo.mp4
    • -i 指定m3u8文件地址,支持http、https路径
    • -c copy 将ts文件合并成指定文件格式,例如mp4
    •  

    2.mpd

    mpd的地位和m3u8一样,只是描述视频的文本而不是视频。所以用文本编辑器阅读mpd。

    mpd内描述了两种类型(mimeType)的文件:video和audio,即视频和音频,每种类型又包括了一个*.mp4的视频头和一连串*.m4s视频。操作思路是先分别合并视频和音频的*.mp4+*.m4s,得到video.mp4和audio.mp4,最后再合并音频和视频。下面说说具体的操作步骤。

    打开mpd,找到media=”xxxxx$RepresentationID$-$Number$.m4s” initialization=”xxxxx$RepresentationID$.mp4″

    上面的m4s和mp4的文件名只是一个例子。我就以这个例子来讲,大家灵活变通。这段代码至少出现两次,一个是音频一个是视频。$RepresentationID$可以在后面的<Representation id=”xxx”…></Representation>里找到,而且这里面还提供了文件类型(video或audio)、分辨率等等信息,我们可以选择我们需要的视频和音频对应的RepresentationID。$Number$通常是从1开始一直增加到某个整数(因为m4s有很多个)这个大家下载的时候可以试探一下,也可以用上面提到的用开发者工具的方法看看最后截止到那个文件名。得到了*.m4s和*.mp4的地址,用批量下载工具(比如Internet Download Manager、浏览器插件Chrono下载管理器等)下载就可以了。建议音频文件下载到一个文件夹,视频文件下载到另一个文件夹,方便之后合并,否则容易搞混。

    这样我们就得到了视频和音频的*.mp4+*.m4s。但这时候的*.mp4是看不了的,因为它只是一个视频(音频)头。在cmd中合并它们。合并代码是copy /b   文件1+文件2+...+文件名n   输出后的文件名,例如copy /b d:\video\1.mp4 d:\video\*.m4s video.mp4。这个时候mp4已结可以打开了,一个只有声音,一个只有画面。

    最后用ffmpeg合并video.mp4和audio.mp4。大家先网上搜索ffmpeg下载。然后在ffmpeg.exe的文件夹中打开cmd,输入ffmpeg.exe -i "d:\video\video.mp4" -
    i "d:\audio\audio.mp4" -c:v copy -c:a copy "D:\final.mp4"
    就大功告成了。

    如果没有mpd文件,可以打开浏览器,按f12调出开发者工具,选择network,然后打开视频页面,在network下看看有没有加载mpd。你也有可能看到一堆.m4s和几个.mp4的链接,通过这些链接得到命名规律,用批量下载工具下载它们,最后用上面两段的方法合并它们!

     


    这两种方法描述很复杂,其实操作起来很简单。

    展开全文
  • TS平分

    千次阅读 2020-12-28 21:14:53
    e$z.a3U(Q如果给定的数据是各次预报和观测的值,和ets评分的阈值,则用如下代码,其中多出一段判断命中、空报、漏报和正确否定次数的代码,对TS评分也一样。气象数值模式气象数值模式数值模式气象模式海洋模式气候...

    8 G; e$

    z. a3 U( Q

    如果给定的数据是各次预报和观测的值,和

    ets

    评分的阈值,则用如下代码,其中多出一段判断命中、空报、漏

    报和正确否定次数的代码,对

    TS

    评分也一样。

    气象

    数值

    模式

    气象数

    值模式

    数值模

    气象

    模式

    海洋模

    气候

    模式

    ,WRF

    MM5

    ,Grapes,HYCOM,LI

    COM,

    同化

    合预报

    模式联

    式论坛

    ) p' g4 [3 K7

    B! E$

    M+ K) x

    subroutine QETS(ets,yuezhi,N,forc,obse)

    气象

    数值

    气象

    数值模

    数值

    模式

    气象模

    海洋

    模式

    候模式

    ,W

    RF

    ,MM5,Grapes,HYCO

    M,LICO

    M,

    同化

    集合预

    式联盟

    模式论

    . ]' d& }6 t+ W9 {

    implicit none

    integer ::H,F,M,C !

    命中,空报,漏报,正确否定

    www.mn

    muc.org; U( A; Z G+ U# a" Q7 l9 G# Q

    integer ::Fo,Ob

    N !

    发布警报次数,事件发生次数,总预报次数

    Meteorological Numerical Model Union of China (MNMUC)

    国气象

    数值模

    式联盟

    l6 e+ M6 b8

    integer ::i

    www.mnmuc.org$ K8 B, _2 E5 t8 ]

    real ::forc(N),obse(N)!

    预报和观测的降水序列

    Meteorological Numerical Model Union of China (MN

    MUC)

    国气象

    数值模

    式联盟

    4 s0 L! ^' d. ]2 n1

    J9 w

    real ::yuezhi,ets !

    降水事件的评定阈值,

    ets

    得分

    Meteorological Numerical Model Un

    ion of

    China (MN

    MUC)

    国气象

    数值模

    式联

    7 Z1

    R3 H4 G!

    ~. V' G3

    ) Q

    H=0

    气象

    数值

    模式

    气象数

    值模式

    数值

    模式

    象模式

    海洋模

    候模式

    ,W

    RF

    ,MM5,Grapes,HYCO

    M,LICOM,

    同化

    集合预

    模式

    联盟

    式论

    7 g; A+ Y8 ?+ Y6 H

    F=0

    Meteorological Numerical Model Union of China (MNMU

    C)

    国气象

    数值模

    式联盟

    5 v7 Y5 J& a- P. V, _% @

    M=0

    Meteorological Numerical Model Union

    of China (MNMU

    C)

    中国

    气象数

    值模式

    联盟

    . j1 Z! I. `*

    O) n. r, H6 ~. U

    C=0

    do i=1,N

    if(forc(i)>=yuezhi.and.obse(i)>=yuezhi)H=H+1

    if(forc(i)>=yuezhi.and.obse(i)

    if(forc(i)=yuezhi)M=M+1

    气象

    数值

    模式

    象数值

    模式

    值模式

    气象模

    海洋

    模式

    气候模

    ,WRF

    ,MM5,Grapes,HYCO

    M,LICO

    M,

    集合

    预报

    式联盟

    模式论

    ' I. S9

    k2 C8

    _+ O. a

    if(forc(i)

    气象

    数值

    模式

    象数值

    模式

    值模式

    气象

    模式

    洋模式

    气候模

    ,WRF

    MM5,Grapes,HY

    COM,LI

    COM,

    合预报

    模式联

    模式

    论坛

    % s" J0 x

    / s. x

    5 n/

    M1 ~' j

    enddo

    / D! m4 K/ P& ? ~/ L

    5 b( Q

    Fo=H+F

    j3 A% m" [0 p1 `. r2 V4

    Ob=H+M

    N=H+F+M+C

    ets=(H-Fo*Ob/N)/(H+F+M-Fo*Ob/N)

    return

    气象

    数值

    模式

    象数值

    模式

    数值模

    气象

    模式

    洋模式

    气候模

    ,WRF

    MM5,Grapes,HY

    COM,LI

    COM,

    合预报

    模式联

    模式

    论坛

    , j8 B!

    z2

    C8

    end subroutine

    Meteoro

    logical Numerical Model Un

    ion of

    China (MN

    MUC)

    中国气

    象数值

    模式联

    8 G; e$

    z. a3 U( Q

    展开全文
  • TS与JAVA相互调用(TS篇)

    2021-02-12 15:52:28
    PS 参数 ①,JAVA的方法 ②,JAVA的参数 ③,回调函数 二 : JAVA调用TS function connectWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { callback(WebViewJavascriptBridge) } else { ...

    window["WebViewJavascriptBridge"].callHandler(

    ‘enterGame‘

    , JSON.stringify($param)

    , function(responseData) {

    // document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseData

    console.log( `enterGame 2 Android callback param : ${responseData}` );

    }

    );

    PS 参数

    ①,JAVA的方法

    ②,JAVA的参数

    ③,回调函数

    二 : JAVA调用TS

    function connectWebViewJavascriptBridge(callback) {

    if (window.WebViewJavascriptBridge) {

    callback(WebViewJavascriptBridge)

    } else {

    document.addEventListener(

    ‘WebViewJavascriptBridgeReady‘

    , function() {

    callback(WebViewJavascriptBridge)

    },

    false

    );

    }

    }

    //调用方法

    connectWebViewJavascriptBridge(function(bridge) {

    bridge.init(function(message, responseCallback) {

    console.log(‘JS got a message‘, message);

    var data = {

    ‘Javascript Responds‘: ‘测试中文!‘

    };

    if (responseCallback) {

    console.log(‘JS responding with‘, data);

    responseCallback(data);

    }

    });

    /// Java 调 JS

    bridge.registerHandler("functionInJs", function(data, responseCallback) {

    document.getElementById("show").innerHTML = ("data from Java: = " + data);

    if (responseCallback) {

    var responseData = "Javascript Says Right back aka!";

    responseCallback(responseData);

    }

    });

    })

    注意 :

    031e025317f9bf8d90b711e6244357ef.png

    functionInJs : 注册JAVA可以调用的方法

    原文:https://blog.51cto.com/aonaufly/2427861

    展开全文
  • ts笔记

    2020-12-21 14:36:07
    像js是网景公司发明的,每一门语言都是人发明的,由于是人发明的,人总是会犯错,所以每一门语言都会有一些错误,那typescript主要就是为了解决js的一些错误或认为它不好的地方复制代码TS是什么TypeScript = ...

    背景

    typescript 是微软发明的,像js是网景公司发明的,

    每一门语言都是人发明的,由于是人发明的,人总是会犯错,

    所以每一门语言都会有一些错误,那typescript主要就是为了解决js的一些错误或认为它不好的地方

    复制代码

    TS是什么

    TypeScript = Type + Script(标准JS)。

    我们从TS的官方网站上就能看到定义:

    TypeScript is a typed superset of JavaScript that compiles to plain JavaScript。

    TypeScript是一个编译到纯JS的有类型定义的JS超集

    JavaScript 和 TypeScript 的主要差异

    TypeScript 可以使用 JavaScript 中的所有代码和编码概念,TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序

    TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展。

    JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。

    TypeScript 通过类型注解提供编译时的静态类型检查。

    TypeScript 中的数据要求带有明确的类型,JavaScript不要求。

    TypeScript 为函数提供了缺省参数值。

    TypeScript 引入了 JavaScript 中没有的“类”概念。

    TypeScript 中引入了模块的概念,可以把声明、数据、函数和类封装在模块中。

    安装与调试

    npm install typescript@2.9.2 -g

    复制代码

    安装完之后我们会得到两个命令tsc和tsserver

    tsc: TypeScript Compiler 把ts变成js的程序

    npm install ts-node@7.0.0 -g

    复制代码

    让node支持typescript

    注意记下 ts-node 安装后的可执行文件路径,后面要用的

    为什么用TS

    从开发效率上看,

    虽然需要多写一些类型定义代码,但TS在VSCode、WebStorm等IDE下可以做到智能提示,智能感知bug,同时我们项目常用的一些第三方类库框架都有TS类型声明

    解决了 IDE/编辑器无法智能提示的痛点。

    使用第三方库时方便查看文档(使用 TS 的过程就是一种学习的过程)

    老是将数组的slice和splice方法搞混

    使用Uniapp的 弹框组件,配合idea快速了解api需要哪些参数,每个参数是什么类型, 且参数代表什么含义

    配合IDE/编辑器 智能感知bug

    声明变量时需要指定类型

    接口规定了对象中要包含的属性(不能多也不能少)

    enum枚举类型的属性 只读

    拼写错误

    从可维护性上看

    长期迭代维护的项目开发和维护的成员会有很多,团队成员水平会有差异,而软件具有熵的特质,长期迭代维护的项目总会遇到可维护性逐渐降低的问题,有了强类型约束和静态检查,以及智能IDE的帮助下,可以降低软件腐化的速度,提升可维护性,且在重构时,强类型和静态类型检查会帮上大忙,甚至有了类型定义,会不经意间增加重构的频率(更安全、放心)

    从线上运行时质量上看

    现在的SPA项目的很多bug都是由于一些调用方和被调用方(如组件模块间的协作、接口或函数的调用)的数据格式不匹配引起的,由于TS有编译期的静态检查,让我们的bug尽可能消灭在编译器,加上IDE有智能纠错,编码时就能提前感知bug的存在,我们的线上运行时质量会更为稳定可控

    rollbar 是一个异常监控平台,它列举了前端项目中top10的错误类型

    文章结尾处也说明了,使用Ts时可以避免很多低级错误

    TS能干点啥

    类型系统

    js七种数据类型 + any + enum + void + never

    let isDone: boolean = false;

    let decimal: number = 6;

    let color: string = "blue";

    // 数组,有两种写法

    let list: number[] = [1, 2, 3];

    let list: Array = [1, 2, 3];

    // 元组(Tuple)各元素的类型不必相同

    let x: [string, number] = ["hello", 10];

    // 枚举

    enum Color {Red = 1, Green = 2, Blue = 4}

    let c: Color = Color.Green;

    // 不确定的可以先声明为any

    let notSure: any = 4;

    // 声明没有返回值

    function warnUser(): void{

    alert("This is my warning message");

    }

    let u: undefined = undefined;

    let n: null = null;

    // 类型永远没返回

    function error(message: string): never{

    throw new Error(message);

    }

    // 程序员自身 主观判断 h是一个字符串(这个判断不一定对),ts会相信你,如果程序报错就是程序员的锅

    let someValue: any = "this is a string";

    let strLength: number = (someValue).length;

    let strLength: number = (someValue as string).length;

    复制代码

    类型编译检查

    运行时报错: 浏览器读取html,遇到 script标签,下载并运行js,bug只会在运行时发现

    编译时报错: 在编译的时候报错,提前处理bug, 而不是当用户执行脚本时才报错

    .java --javac--->.class字节码文件, jvm运行.class文件

    .ts --tsc --->.js文件, 浏览器运行

    类型推断

    让我们既能享受js的灵活又能享受ts的类型检查

    // 如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。

    let myFavoriteNumber = 'seven';

    //等价于

    let myFavoriteNumber :string= 'seven';

    复制代码

    面向对象编程增强

    面向对象(oop)的三大特征: 封装,继承,多态(抽象类, 接口, 泛型)

    封装: 隐藏内部实现细节,对外只暴露接口,调用方只需按接口规定调用即可,封装的重要手段就是访问控制权限,在ts中为 public/protected/private

    继承:子类继承父类,子类拥有父类中除了private声明的所有属性(创建子类时调用父类的构造方法)

    多态: 多态是由于继承或实现而引出的,继承者可以重写父类的方法, 实现者可以实现接口中的抽象方法, 当用父类的引用指向子类的对象时,就形成了向上造型,从而形成了多态

    访问权限控制

    TS中的类比js中的类多了 抽象类和访问权限限制 两个概念

    JS面向对象编程的一个大问题就是没有提供原生支持信息隐藏的方案(很多时候都是通过约定编码方式来做)

    私有的成员变量,公共的get/set方法

    class Demo7 {

    private _name:string;

    private _age:number;

    constructor(name: string, age: number) {

    this._name = name;

    this._age = age;

    }

    get name(): string {

    return this._name;

    }

    set name(value: string) {

    this._name = value;

    }

    get age(): number {

    return this._age;

    }

    set age(value: number) {

    this._age = value;

    }

    }

    复制代码

    接口

    TS中的一个核心原则之一就是类型检查关注的是值的形状,有时就叫做“鸭子辨型”(duck typing)或“结构化子类型”(structural subtyping)。TS中interface就承担了这样的角色,定义形状与约束,在内部使用或者和外部系统协作

    接口在定义的时候,不能初始化属性以及方法,属性不能进行初始化,方法不能实现方法体。 类实现接口之后,必须声明接口中定义的属性以及方法。

    /**

    * 接口就是用代码描述一个对象必须包含什么属性(包括方法), 不能多也不能少

    */

    interface Shape {

    head: string,

    body: string

    }

    interface Human {

    name: string,

    age: number,

    shape: Shape,

    say(word:string): void;

    }

    interface Man extends Human3{

    gender:string

    }

    let h: Man = {

    name: '张三',

    gender: '男',

    age: 27,

    shape: {head: '头', body: '身体'},

    say(word: string): void {

    console.log(word)

    }

    }

    // 可选属性

    interface SquareConfig {

    color?: string;

    width?: number;

    }

    // 只读属性

    interface Point {

    readonly x: number;

    readonly y: number;

    }

    复制代码

    类实现接口之后,必须声明接口中定义的属性以及方法,

    interface Animal11 {

    name: string;

    eat: () => void;

    }

    class Dog implements Animal11 {

    name: string = '小白';

    eat() {

    console.log('tag', 'I love eat bone!')

    }

    }

    const dog: Dog = new Dog();

    dog.eat();

    复制代码

    数据库中的一条记录对应java中的一个实例对象,该类中的字段和字段类型与表中的字段及字段类型匹配,

    有了TS的接口后,我们可以用 接口和 后端的实体类(或接口返回的数据) 一一对应,这样就不会出现接口返回属性找不到,或接口返回数据类型不匹配的问题

    抽象类

    /**

    * Abstract class 抽象类(class能够拥有的 abstract class 都拥有)

    *

    * 抽象类中可能包含抽象方法(只有方法名,没有具体实现的方法),所以抽象类不可以实例化, 一般都作为父类

    * 反证法: 抽象类如果可以实例化,实例化出来的对象如何执行抽象方法(没有方法)

    *

    * class --> abstract class --> interface

    * 抽象程度逐渐提升,interface 抽象程度最高

    */

    abstract class Animal {

    kind:string;

    constructor(kind: string) {

    this.kind = kind;

    }

    breath():void {

    console.log('呼吸')

    }

    // Method 'birthType' cannot have an implementation because it is marked abstract

    // 抽象方法不能有具体实现

    abstract birthType():void

    }

    class Human1 extends Animal {

    // 子类实现抽象父类中的抽象方法

    birthType(): void {

    console.log('胎生')

    }

    }

    复制代码

    泛型

    软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型

    在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件

    总结一句话: 当我们需要支持多种类型时,用T当占位符,这个T就是泛型,代表广泛的类型

    /**

    * 泛型就是用一个东西表示广泛的类型。可以理解为一个占位符

    */

    function returnIt(arg: T): T{

    return arg;

    }

    let s = returnIt('hi')

    let n = returnIt(123)

    /**

    * 泛型接口

    */

    interface genFn {

    ( arg : T ) : T;

    };

    let ide : genFn = identity;

    /**

    * 泛型类

    */

    class Gen {

    zero : T;

    add : (x : T, y : T) => T;

    }

    let gen = new Gen();

    /**

    * 泛型约束: 就是给泛型添加一些约束

    * 例如: 并不是任意的类型T的实例 都具备length属性, 我们先创建一个接口Lengthwise, 则T extends Lengthwise 时, T一定具备length属性

    */

    interface Lengthwise {

    length: number;

    }

    function loggingIdentity(arg: T): T{

    console.log(arg.length); // Now we know it has a .length property, so no more error

    return arg;

    }

    复制代码

    T vs any

    // T代表广泛的类型, 参数是T类型,返回值是T类型,一一对应

    function f1(arg:T):T{

    return arg

    }

    let s1 = f1('hello')

    s1.length;

    // 如果使用any的话 无法做类型推断

    function f2(arg:any):any{

    return arg

    }

    let s2 = f2('hello')

    复制代码

    其实数组接受的就是一个泛型

    let ss:Array = ['hello']

    复制代码

    函数

    /**

    *你会发现用ts写函数会很放心,因为我 入参类型写死了,返回值类型也写死了,唯一有可能出错的地方就是我的逻辑代码

    * 也方便重构,n年之后回头再看这个函数,一目了然, 如果用js的话,你可能要去差这个函数到底返回什么类型的值

    */

    function add(a:number, b:number):number{

    return a + b

    }

    复制代码

    可选参数

    /**

    * TypeScript里的每个函数参数都是必须的,而编译器检查用户是否为每个参数都传入了值

    * JavaScript里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是undefined。 *

    * 在TypeScript里我们可以在参数名旁使用 ?实现可选参数的功能

    */

    function hi2(name:string, age?:number){

    console.log(`Hi, ${name}, ${age}`)

    }

    hi2('张三', 27)

    复制代码

    重载

    /**

    * 重载: 函数重载的意义在于能够让你知道传入不同的参数得到不同的结果

    *

    * 关于函数重载,必须要把精确的定义放在前面,

    * 最后函数实现时,需要使用 |操作符或者?操作符,把所有可能的输入类型全部包含进去

    */

    // 上边是声明

    function add1 (arg1: string, arg2: string): string;

    function add1 (arg1: number, arg2: number): number;

    function add1 (arg1: string | number, arg2: string | number){

    // 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 arg1 + arg2

    if (typeof arg1 === 'string' && typeof arg2 === 'string') {

    return arg1 + arg2

    } else if (typeof arg1 === 'number' && typeof arg2 === 'number') {

    return arg1 + arg2

    }

    }

    // 参数要么同时为 number 要么同时为 string, 因为只定义了这两种

    // add1(1, '1')

    复制代码

    重载和重写有什么区别?

    类型声明文件

    由于非常多的JavaScript库并没有提供自己关于TypeScript的声明文件,导致TypeScript的使用者无法享受这种库带来的类型,因此社区中就出现了一个项目DefinitelyTyped,他定义了目前市面上绝大多数的JavaScript库的声明,当人们下载JavaScript库相关的@types声明时,就可以享受此库相关的类型定义了

    TypeScript有一个叫做声明文件的功能, 即一个以.d.ts为扩展名的文件,通过它我们可以为JavaScript文件定义类型

    .d.ts文件。 方法里没有实现细节,它只描述了类型。 TypeScript将.d.ts 和 .js组合到一起,这样,在编译是使用这个声明文件,在运行时使用这个原生的JS文件,

    这样我们就可以 使用Ts提供的类型安全和idea的智能语法提示

    学习成本

    老项目迁移

    对于老项目,由于TS兼容ES规范,所以可以比较方便的升级现有的JS(这里指ES6及以上)代码,逐渐的加类型注解,渐进式增强代码健壮性。迁移过程:

    npm全局安装typescript包,并在工程根目录运行tsc --init,自动产生tsconfig.json文件。

    默认的3个配置项:更多配置项说明

    "target":"es5": 编译后代码的ES版本,还有es3,es2105等选项。

    "module":"commonjs":编译后代码的模块化组织方式,还有amd,umd,es2015等选项。

    "strict":true:严格校验,包含不能有没意义的any,null校验等选项。

    初始化得到的tsconfig.json无需修改,增加"allowJs": true选项。

    配置webpack配置,增加ts的loader,如awesome-typescript-loader。

    loaders: [

    // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.

    { test: /\.tsx?$/, loader: "awesome-typescript-loader" }

    ]

    复制代码

    此时你可以写文件名为ts和tsx(React)后缀的代码了,它可以和现有的ES6代码共存,VSCode会自动校验这部分代码,webpack打包也没问题了。

    逐渐的,开始打算重构以前的ES6代码为TS代码,只需将文件后缀改成ts(x)就行,就可以享受TS及IDE智能感知/纠错带来的好处。

    展开全文
  • 一阶方程调节时间ts

    千次阅读 2021-04-20 13:45:47
    自动控制原理上的调节时间Tss是哪个单词的缩写?settledadj.稳定的是指初始到稳定需要用的准备时间自动控制原理 调节时间ts两个方法:1.用matlab软件,很快就能算出参数!2.你应该知道闭环主导极点吧!求出特征方程,...
  • ts 流服务器

    2020-12-19 12:24:47
    首先TS流是有许多的TS Packet组成的,每个TS Pac... 文章 double2li 2014-12-12 1469浏览量 为SRS流媒体服务器添加HLS加密功能(附源码) 为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能...
  • Ts 常用写法

    2021-08-25 16:55:40
    /* bad */ const str: String = 'foo'; const bool: Boolean = true; const num: Number = 1; const symb: Symbol = Symbol('foo'); const func: Function = () =>...const capitalObj2: Object = { a: 's..
  • ts深入理解笔记

    2021-03-08 18:17:44
    作用,用来给文件分组,告诉ts哪些文件是有效的,哪些是无效的。除了有效文件所携带信息外,编译上下文还包含有正在被使用的编译选择的信息。 tsconfig.json tsconfig.json,用于去定义正在被使用的编译选择的信息...
  • ts中类型

    千次阅读 2021-02-11 12:53:07
    */ /* typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验 写ts代码必须指定类型 var flag:boolean=true; // flag=123; //错误 flag=false; //正确 console.log(flag); */ // 数字类型...
  • TS中的数据类型 (上)

    2021-11-25 10:19:18
    数组类型 //ts中定义数组有两种方式 //1.第一种定义数组的方式 var arr:number[]=[11,22,33]; console.log(arr); //2.第二种定义数组的方式 var arr:Array=[11,22,33]; console.log(arr) 五. 元组类型(tuple) ...
  • 封装格式--TS

    2021-11-17 23:53:49
    TS基础知识TS packet的大小TS封装过程PES packet内部结构如下图关键栏位TS packet内部结构关键栏位PSI/SI 基础知识 ES流(Elementary Stream): 基本码流,不分段的音频、视频或其它信息的连续码流。 PES流(Packeted...
  • 加密ts文件解密

    2021-08-12 05:04:56
    X-VERSION:3#EXT-X-MEDIA-SEQUENCE:0#EXT-X-ALLOW-CACHE:YES#EXT-X-TARGETDURATION:13#EXT-X-KEY:METHOD=AES-128,URI="https://j-island.net/movie/hls_key/s/857401e309d8a032c3bb18f4b09b8db2/?f=jj_2...
  • 我们看到了Vuex的类型声明文件,我们知道Vuex的源码是使用JavaScript来开发的,JS并没有类型的声明,那么Vuex要实现TypeScript的类型就只能通过TypeScript的.d.ts来去描述类型。 那么今天我们来看看Vuex是如何通过.d...
  • ts-key-enum

    2020-12-20 18:20:28
    A TypeScript string enum for compile-time safety when working with event.keyts-key-enumA TypeScript string enum for compile-time safety when working with event.key.Installnpm install ts-key-enum --sav...
  • TS -- 枚举类型

    千次阅读 2020-12-30 09:49:01
    字符串的时候就不是任意字符串,正确的写法只能' kind: ShapeKind.Circle' ~~~ ~~~ enum ShapeKind { Circle = 'c', Square = 's', } interface Circle { kind: ShapeKind.Circle; radius: number; } interface ...
  • ts自动编译

    2021-01-30 11:29:41
    webstorm typescript自动编译javascript配置: 1.... [ "es5", "dom", "es2015.promise" ], "types":[] }, "exclude": [ "node_modules" ] } 最后完成ts的编写后Ctrl+s都会自动生成js文件,文档结构图如下:
  • 视频 TS 内容详细讲解

    2020-12-25 17:34:19
    视频 TS 内容详细讲解 题记:时间戳将每一秒分成90000份,即将每一毫秒分成90份 MPEG2系统用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中。 在TS 层, TS头信息包含了节目时钟参考PCR...
  • enviroment vite vue3 set-up mode error import { defineProps, PropType, ref, computed} from "vue"; defineProps({ titleInfo: { type: Object as PropType<....vite/vue.js oes not provide a
  • [20190505]ts 命令在哪里.txt--//在论坛问一下ts命令在哪里?没人解答,自己也google看了一下:--//however, if I use the same format string with moreutils' ts, the nanosecond precision fails:--//应该在1个...
  • ts中的接口和类型别名很相似,从不同中学习认识接口。 两者的区别 接口只适用于对象类型定义,无论是单个对象还是函数参数为对象,数组元素为对象的定义,然而类型别名适用于任何变量,并且可以是基础类型。可以把...
  • TS语法之装饰器(注解)

    千次阅读 2021-02-11 12:53:14
    // @ts-ignore descriptor.value = function (...args: any) { // @ts-ignore value.logParam?.forEach(i => console.log(`第${i}参数: ${args[i]}`)); return value.call(this, ...args); }; } } export function ...
  • vueRouter4.0+ts

    2021-05-27 10:34:14
    S,R> module的类型 S 代表当前module的State类, R代表 createStore的State类 ActionContext<S,R> store上下文的类型 S 代表当前的State类, R代表 createStore的State类 StoreOptions 代表创建的...
  • 别说我写的菜,我就是个新手能实现功能对我来说都是一个动力url需要在你播放视频的页面点击f12打开开发者工具,选着network...这个就是url开始的ts文件名image.png (7.92 KB, 下载次数: 1)2020-6-5 19:55 上传最后...
  • code.ts:1:1 - error TS2584: Cannot find name 'console'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'. 1 console.log("hello TS"); 最近在学习...
  • TS判断6种数据类型

    2021-06-08 14:56:56
    function getType(obj: any) { const type = typeof obj;... "[object Null]" return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); } String Date Number Boolean Array Object
  • 今天我打开Visual Studio Code准备进行Angular开发时,看到Angular TSLint报了这个警告信息: Not using the local TSLint version found for ‘c:/Code/SPA/spartacus/feature-libs/organization/administration/...
  • 一、ts文件中引入jquery。1.大家是否有再vue 上使用过 ts,并再 .ts文件中引用过 jquery1.1是不是遇到过如下问题:import $ from 'jquery';/***Could not find a declaration file for module 'jquery'. 'd:/node-...
  • Vue3项目引用TS语法实例

    千次阅读 2021-07-29 17:28:18
    //script标签上 **lang="ts"** <script lang="ts"> import { defineComponent, reactive, ref, toRefs } from 'vue'; //定义一个类型type或者接口interface来约束data type Todo = { id: number, name: ...
  • ts简介TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。是一种视频格式,一般用于实时流媒体和广播电视领域。Ts与Mp4优势对比Mp4在IOS下可以自动播放,但是在部分安卓机下无法自动播放产生黑屏...
  • 说明:联想Think塔式服务器TS250和塔式服务器TS550,我想很多人应该不清楚,其实这两服务器的主板是一样的(所以本文同样适用于联想Think TS550塔式服务器)。由于Windows Server2008R2系统内核没有USB3.0的相关驱动,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 144,794
精华内容 57,917
关键字:

ts832s