Ver código fonte

support use typescript

陈帅 7 anos atrás
pai
commit
deb14330ad

+ 5 - 0
package.json

@@ -15,6 +15,8 @@
     "lint:fix": "eslint --fix --ext .js src mock tests && npm run lint:style",
     "lint-staged": "lint-staged",
     "lint-staged:js": "eslint --ext .js",
+    "tslint": "npm run tslint:fix",
+    "tslint:fix": "tslint --fix 'src/**/*.ts*'",
     "test": "umi test",
     "test:component": "umi test ./src/components",
     "test:all": "node ./tests/run-tests.js",
@@ -71,6 +73,9 @@
     "eslint-plugin-jsx-a11y": "^6.1.2",
     "eslint-plugin-markdown": "^1.0.0-beta.6",
     "eslint-plugin-react": "^7.11.1",
+    "tslint": "^5.10.0",
+    "tslint-config-prettier": "^1.10.0",
+    "tslint-react": "^3.6.0",
     "gh-pages": "^2.0.1",
     "husky": "^1.1.2",
     "lint-staged": "^7.2.0",

+ 13 - 0
src/components/Authorized/AuthorizedRoute.d.ts

@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { RouteProps } from 'react-router';
+
+type authorityFN = (currentAuthority?: string) => boolean;
+
+type authority = string | string[] | authorityFN | Promise<any>;
+
+export interface IAuthorizedRouteProps extends RouteProps {
+  authority: authority;
+}
+export { authority };
+
+export class AuthorizedRoute extends React.Component<IAuthorizedRouteProps, any> {}

+ 15 - 26
src/components/Authorized/index.d.ts

@@ -1,41 +1,30 @@
 import * as React from 'react';
-import { RouteProps } from 'react-router';
-
-type authorityFN = (currentAuthority?: string) => boolean;
-
-type authority = string | Array<string> | authorityFN | Promise<any>;
-
+import AuthorizedRoute, { authority } from './AuthorizedRoute';
 export type IReactComponent<P = any> =
   | React.StatelessComponent<P>
   | React.ComponentClass<P>
   | React.ClassicComponentClass<P>;
 
-interface Secured {
-  (authority: authority, error?: React.ReactNode): <T extends IReactComponent>(target: T) => T;
-}
-
-export interface AuthorizedRouteProps extends RouteProps {
-  authority: authority;
-}
-export class AuthorizedRoute extends React.Component<AuthorizedRouteProps, any> {}
+type Secured = (
+  authority: authority,
+  error?: React.ReactNode
+) => <T extends IReactComponent>(target: T) => T;
 
-interface check {
-  <T extends IReactComponent, S extends IReactComponent>(
-    authority: authority,
-    target: T,
-    Exception: S
-  ): T | S;
-}
+type check = <T extends IReactComponent, S extends IReactComponent>(
+  authority: authority,
+  target: T,
+  Exception: S
+) => T | S;
 
-export interface AuthorizedProps {
+export interface IAuthorizedProps {
   authority: authority;
   noMatch?: React.ReactNode;
 }
 
-export class Authorized extends React.Component<AuthorizedProps, any> {
-  static Secured: Secured;
-  static AuthorizedRoute: typeof AuthorizedRoute;
-  static check: check;
+export class Authorized extends React.Component<IAuthorizedProps, any> {
+  public static Secured: Secured;
+  public static AuthorizedRoute: typeof AuthorizedRoute;
+  public static check: check;
 }
 
 declare function renderAuthorize(currentAuthority: string): typeof Authorized;

+ 1 - 1
src/components/Charts/ChartCard/index.d.ts

@@ -1,5 +1,5 @@
-import * as React from 'react';
 import { CardProps } from 'antd/lib/card';
+import * as React from 'react';
 
 export interface IChartCardProps extends CardProps {
   title: React.ReactNode;

+ 11 - 0
src/components/Login/LoginItem.d.ts

@@ -0,0 +1,11 @@
+import * as React from 'react';
+export interface ILoginItemProps {
+  name?: string;
+  rules?: any[];
+  style?: React.CSSProperties;
+  onGetCaptcha?: () => void;
+  placeholder?: string;
+  buttonText?: React.ReactNode;
+}
+
+export class LoginItem extends React.Component<ILoginItemProps, any> {}

+ 7 - 0
src/components/Login/Tab.d.ts

@@ -0,0 +1,7 @@
+import * as React from 'react';
+
+export interface ILoginTabProps {
+  key?: string;
+  tab?: React.ReactNode;
+}
+export default class LoginTab extends React.Component<ILoginTabProps, any> {}

+ 12 - 26
src/components/Login/index.d.ts

@@ -1,34 +1,20 @@
-import * as React from 'react';
 import Button from 'antd/lib/button';
-export interface LoginProps {
+import * as React from 'react';
+import LoginItem from './LoginItem';
+import LoginTab from './LoginTab';
+
+export interface ILoginProps {
   defaultActiveKey?: string;
   onTabChange?: (key: string) => void;
   style?: React.CSSProperties;
   onSubmit?: (error: any, values: any) => void;
 }
 
-export interface TabProps {
-  key?: string;
-  tab?: React.ReactNode;
-}
-export class Tab extends React.Component<TabProps, any> {}
-
-export interface LoginItemProps {
-  name?: string;
-  rules?: any[];
-  style?: React.CSSProperties;
-  onGetCaptcha?: () => void;
-  placeholder?: string;
-  buttonText?: React.ReactNode;
-}
-
-export class LoginItem extends React.Component<LoginItemProps, any> {}
-
-export default class Login extends React.Component<LoginProps, any> {
-  static Tab: typeof Tab;
-  static UserName: typeof LoginItem;
-  static Password: typeof LoginItem;
-  static Mobile: typeof LoginItem;
-  static Captcha: typeof LoginItem;
-  static Submit: typeof Button;
+export default class Login extends React.Component<ILoginProps, any> {
+  public static Tab: typeof LoginTab;
+  public static UserName: typeof LoginItem;
+  public static Password: typeof LoginItem;
+  public static Mobile: typeof LoginItem;
+  public static Captcha: typeof LoginItem;
+  public static Submit: typeof Button;
 }

+ 2 - 2
src/components/PageHeader/breadcrumb.d.ts

@@ -1,6 +1,6 @@
 import * as React from 'react';
-import { IPageHeaderProps } from './index'
+import { IPageHeaderProps } from './index';
 
 export default class BreadcrumbView extends React.Component<IPageHeaderProps, any> {}
 
-export function getBreadcrumb(breadcrumbNameMap: Object, url: string): Object;
+export function getBreadcrumb(breadcrumbNameMap: object, url: string): object;

+ 35 - 0
tsconfig.json

@@ -0,0 +1,35 @@
+{
+  "compilerOptions": {
+    "outDir": "build/dist",
+    "module": "esnext",
+    "target": "es2016",
+    "lib": ["es6", "dom"],
+    "sourceMap": true,
+    "baseUrl": ".",
+    "jsx": "react",
+    "allowSyntheticDefaultImports": true,
+    "moduleResolution": "node",
+    "rootDirs": ["/src", "/test", "/mock","./typings"],
+    "forceConsistentCasingInFileNames": true,
+    "noImplicitReturns": true,
+    "suppressImplicitAnyIndexErrors": true,
+    "noUnusedLocals": true,
+    "allowJs": true,
+    "experimentalDecorators": true,
+    "paths": {
+      "@/*": ["./src/*"]
+    }
+  },
+  "include": ["./src"],
+  "exclude": [
+    "node_modules",
+    "build",
+    "scripts",
+    "acceptance-tests",
+    "webpack",
+    "jest",
+    "src/setupTests.ts",
+    "tslint:latest",
+    "tslint-config-prettier"
+  ]
+}

+ 11 - 0
tslint.json

@@ -0,0 +1,11 @@
+{
+  "extends": ["tslint:latest", "tslint-react", "tslint-config-prettier"],
+  "rules": {
+    "no-var-requires": false,
+    "no-submodule-imports": false,
+    "object-literal-sort-keys": false,
+    "jsx-no-lambda": false,
+    "no-implicit-dependencies": false,
+    "no-console": false
+  }
+}