基本类型定义
let str: string = "string";
let num: number = 123;
let boo: boolean = true;
let un: undefined = undefined;
let nu: null = null;
将非当前数据类型的值赋给该变量的时候会报错
其他基本数据类型也是如此,如果需要一个可以变化数据类型的变量可以这样:
let strOrNum: string | number = "str";
strOrNum = 123
// or
let strOrNum: string | number | boolean | undefined | null = "str";
strOrNum = 123;
strOrNum = true;
strOrNum = null;
或者直接使用 any
标记,文档上说明:
在这些情况下,我们可能要选择退出类型检查。为此,我们使用以下any类型标记这些值
类型变量any允许您访问任意属性,即使不存在也是如此。这些属性包括函数,并且TypeScript不会检查它们的存在或类型:
复杂数据类型
数组有两种方式定义
// 字符型数组
let string_arr: Array<string> = ["string1", "string2"];
// or
let string_arr: string[] = ["string1", "string2"];
// 数组类型数组
let arr: number[] = [1, 2];
// or
let arr: Array<number> = [1, 2];
let objArr :Array<object> = [{a:"a"},{b:"b"}];
数组内的类型要对应
要多种类型元素的话可以这样定义
let arr: Array<number|string> = ["str",2];
let arr: Array<undefined|boolean> = [true, ,];
对象
let person: object = {a:"aa"}
上面这样定义并不会有报错, 不过如果打印a属性,则会有如下提示
ts要求我们要这样定义,将属性的值和其对应的类型标明
let person: {a:string} = {a:"aa"}
console.log(person.a)
如果要添加新属性,下面这样写是不行的,该对象只能有定义类型的时候声明的具有类型的属性
同时要注意声明了对象的某一属性则该对象必须具有该属性
如果需要更多不确定属性名的属性定义对象可以这样写
let person: { a: string; [propName: string]: any } = { a: "aa" };
// or
let person: {[propName:string]:any} = {}
可有可无的属性: ?:
let person: {
a: string;
b?: string;
[propName: string]: any;
} = {
a: "aa",
};
如果有多个对象都需要某些属性的话都要这样写岂不是很麻烦,这时候我们就可以使用接口来简化:
interface Person {
name: string;
age: number;
sex?: number;
[propName: string]: any;
}
let hongbin : Person = {
name:"hongbin",
age:21,
friends:["pater","David"]
}
还有元组的出现
元组类型允许您用固定数量的元素表示数组,这些元素的类型是已知的,但不必相同。例如,您可能希望将值表示为一对a string和number:
let x : [string,number] = ["str",123]; // √
let x : [string,number] = ["str",123,345]//×
let x : [string,number] = [123,"str"] //×
void
void有点相反any:根本没有任何类型。您可能通常将其视为不返回值的函数的返回类型:
function warnUser(): void {
console.log("This is my warning message");
}
react-native中常见:
// js
const OrderMain = ({ store, products }) => {...}
// ts 要为每个参数指定类型
const OrderMain = ({
store,
products,
}: {
store: { logo: string; name: string; [propName: string]: any };
products: Array<object>;
}) => {...}
在使用expo的ts模板是路由index.tsx文件中配置路由:
新添加的路由name会有语法提示,解决:在生成的types文件下填写新增的路由名
更多的react-native中使用typeScript的用法会陆续到来,最后欢迎来我的公众号找我^ - ^